Tips and Tricks for Android Users
Posts tagged code
Assember/Disassembler for Dalvik
Jul 30th
I ran across a mention of an assember/disassember pair for Dalvik in an XDA Forum posting. Just had a chance to give at least the assembler a try and make sure I could get things working before I posted. Yep, working on the emulator at least. There are a few examples you can start with, instructions for assembling and running are in the comments. And some pages in the wiki that look like they’ll provide some great starting points.
Text to Speech Using Scripting
Jul 25th
I’ve been fooling around with Scripting Layer for Android to generate some speech notifications. Two issues I ran into, figured I would share if anyone else does. The first was that the examples still use the droid.speak() call, and it should be droid.ttsSpeak() instead. Quick fix. The second however I only saw on my CM6 device, which was that no speech was coming out ever after I updated the ttsSpeak() call. logcat turned up the issue quickly enough though. I just needed to go into settings from the home screen and download the data necessary to generate speech. Once you’re in the “Voice Input and Output” area the process is obvious. It’s just knowing that you need to go into settings to get speech working that’s a bit tricky.
Commodore 64 Emulation
Jul 24th
I was happy to see there’s a Commodore 64 emulator in the Marketplace for Android, the Frodo emulator. I played around with a bit, but what I really wanted to do was hack around a bit with some old school basic. This is one of the computers I grew up with, and I get nostalgic for the old days every once in a while. However, I was having a really hard time figuring out how to get the version of Frodo under Android to create a new disk for me to save stuff to. If you can’t save the stuff you’re playing with what’s the use? I could save out the whole state, but I figured there had to be a better way.
So I downloaded a version of VICE for my desktop system. That has a much richer set of controls, one of which is creating and attaching a fresh image (it’s a ‘file’ menu item). I figured if I was lucky the image created with VICE would work to at least get me started on Frodo on my device. And lucky me, yes it does! Actually, now I can push the d64 images back and forth, use the emulator on my desktop to do a little poking around and push the file over to my device to take with me. Very nice! Just remember, save with replace is ‘SAVE “@0:FILENAME”,8′. Otherwise an attempt to overwrite a file will just silently fail. Ahhh, nostalgic.
Android Scripting Environment is now SL4A
Jul 22nd
I downloaded and installed the latest Android scripting package, now called Scripting Layer for Android, or SL4A. I had some issues with it under CyanogenMod5 (probably my own, but I never debugged). Today I updated to a CM6 release and it seems to be working a whole lot better. There are links to a whole bunch of examples on the Tutorials page.
The application interface itself is pretty simple. When it first loads up you won’t have any interpreters besides shell. If you go into the View menu, select interpreters, and then select Add from the menu under there you can add other interpreters. The interpreters generally come with example scripts, which will show up in the main list view once they’re loaded:

There’s a preferences screen, which covers mostly visual options:

If you long press on a script you have an option to edit it:

The editor that comes up is just a simple but effective textbox, so at least you can edit scripts in place on the device:

And then you can run a script, in this place displaying a toast message over the keyboard when I run the hello world program:

Downloading Marketplace Info
Jun 2nd
One of the annoyances of the Android Marketplace (for developers at least) is that there’s no easy way to get the info to use in your own applications. Fortunately some folks have reverse engineered the protocol used by the marketplace app to create an open source project that queries the marketplace servers. I’ve been fooling around with android-market-api, great project. I actually had issues with the latest latest code from the svn repo. But if I pull from the 0_3 tag I can compile my own programs that do things like run through the categories. Nice!
Gettie Awards
May 29th
If you’ve had a hacking waiting around for the right time to be released, this might be it. The Gettie Awards is offering $15,000 to the best Android app they find. There are categories for all the major mobile platforms, and an overall prize of $25,000! If you haven’t been coding, dust off your compiler and get cracking.
Android Scripting Environment
Jun 9th
Google has recently released a scripting environment for Android that allows you to write Python, Lua, or BeanShell scripts that interface with Android functionality. From the project page:
- Handle intents
- Start activities
- Make phone calls
- Send text messages
- Scan bar codes
- Poll location and sensor data
- Use text-to-speech
Getting WebView To Load New Pages
Jun 3rd
There are a bunch of examples of using WebView to display HTML content loaded from the web in an Android app, including the sample from Google for the WebView class. However the ones I found generally don’t load new pages on their own. I can load up Google, but if you click on anything in the app it launches a browser and takes the user out of the app. The answer to the problem is in the additional points on that Hello, WebView page – you need to set a new WebViewClient to handle the URL load requests. Their example is very helpful, but I prefer to do the override with an anonymous inner class:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webview.loadUrl("http://google.com");
setContentView(webview);
}
However, if you follow a link to an image it downloads instead of opens in the view. That’s the same thing the built in browser does, but wasn’t the behavior I expected. I’ll have to figure out how to handle that a bit better.