As I recently wrote, I uploaded "Suzuki Twinkle" to the Android Market. What I was disappointed to learn was that there is no "Educational" category, either as an App or a Game. I ended up selecting Application --> Reference, for lack of a better category.
Suzuki Twinkle is an educational program. While I am sure there may be plenty who may argue for their on specialized category, I hardly think that having an "Educational" category would be considered specialized.
Google - Please fix this and add an "Educational" category to the Market.
15 January, 2010
My first published Android App - "Suzuki Twinkle"

I just published my first Android app last night - "Suzuki Twinkle". It's meant to help beginning Suzuki violin students learn their notes, rhythm and pitch. Suzuki Twinkle was pretty rewarding to write, particularly because I was able to involve my kids. If you try it, you'll hear some clapping and cheering when you get something right - those are my kids. The screen you see is for pitch, where the student is expected to tell if the second note was higher or lower than the first. The next release will add score, a little more beauty and hopefully a smaller download size.
From a technical perspective, I ended up trying a good chunk of the Media API. The app plays midi and ogg content. I dabbled with the MediaPlayer for both the midi and ogg, but ended up settling on JetPlayer for the midi, and SoundPool for the ogg. JetPlayer gives you some control over your midi files, although you have to repackage them into a .jet file beforehand. I use the mute capability to mute tracks when playing back notes. This allows me to pack all of the single notes into a single midi file. It probably isn't necessary, seeing as how that is partially the point of Jet, but it does make for less source files when all is said and done.
My original plan for the midi content was to generate the midi notes on the fly using something similar to the midi API in Java SE. Android unfortunately does not expose such an API. So I then pursued AudioTrack, which allows you to stream audio directly. unfortunately the data needs to be PCM encoded, so the level of effort to create the notes was just too high. Thus, I went the JetPlayer route.
For the ogg content, I gave MediaPlayer more of a shot. It mostly worked, but I found that it's lifecycle was too complex for what I wanted (2-3 second playback), and despite my efforts, I could not get it to play well if the previous playback was interrupted. Enter SoundPool. SoundPool was much easier to use. It has a simple lifecycle, and was designed for what I had in mind anyway.
I currently have all this managed by a single Player class that manages all this so that the midi sounds don't clobber the applause and vice versa.
This was actually a pretty simple app overall to implement, as it took just a few days to complete while working a day job and learning about midi from scratch.
Open Source Notes:
This whole app was written with open source software, I am proud to say. I wrote the app on Ubuntu Karmic 9.10 with the following tools:
* Eclipse
* Android SDK
* Rosegarden
* JetCreator
* Gimp
I expect to be posting the source code soon as GPL.
19 December, 2009
Upgrading Android ADP1 to Donut
I just finished upgrading my ADP1 to Donut. The icons and such look a little more polished, and supposedly the new Google Maps supports turn by turn. If the new Google Maps app works well, I may pick up a phone mount accessory for my car.
Since I use the AT&T pay as you go plan, I also needed to update the Phone app to ignore the "last transaction" messages as I did with cupcake. For those of you that are interested, you can download the modified source and compiled apk:
* PhoneUtils.java
* Phone.apk
The instructions are the same as for cupcake, so see my earlier blog post for instructions.
I have recently tried CyanogenMod on my ADP1, and this patched Phone.apk has been working fine.
Since I use the AT&T pay as you go plan, I also needed to update the Phone app to ignore the "last transaction" messages as I did with cupcake. For those of you that are interested, you can download the modified source and compiled apk:
* PhoneUtils.java
* Phone.apk
The instructions are the same as for cupcake, so see my earlier blog post for instructions.
I have recently tried CyanogenMod on my ADP1, and this patched Phone.apk has been working fine.
17 November, 2009
Google's Intriguing Software Distribution Model
I just read this article (http://tinyurl.com/yzqjmkq) regarding Google providing it's software "less than free".
Apparently Google will share ad revenue with carriers that release their phones using Google's license rather than the FOSS license. The article goes on to say that they suspect Google may do the same with Chrome OS when it comes out.
I find this whole model of software (OS?) distribution rather intriguing. It will be interesting to see how the industry reacts. Microsoft had to discount XP in order to compete with Linux in the netbook space. How will they compete with Chrome OS if Google is basically paying to preload it? Will Microsoft try to leverage Bing in the same fashion? How will this affect Apple? Apple Mac customers seem content to pay a premium, so it would seem that their PC market would be safe for the time being. Although the iPhone is already expected to be eclipsed by Android in terms of market share, what will this mean to the iPhone price point and/or margin?
In any case, it seems healthy to see in the near term. Competition is a good thing.
Apparently Google will share ad revenue with carriers that release their phones using Google's license rather than the FOSS license. The article goes on to say that they suspect Google may do the same with Chrome OS when it comes out.
I find this whole model of software (OS?) distribution rather intriguing. It will be interesting to see how the industry reacts. Microsoft had to discount XP in order to compete with Linux in the netbook space. How will they compete with Chrome OS if Google is basically paying to preload it? Will Microsoft try to leverage Bing in the same fashion? How will this affect Apple? Apple Mac customers seem content to pay a premium, so it would seem that their PC market would be safe for the time being. Although the iPhone is already expected to be eclipsed by Android in terms of market share, what will this mean to the iPhone price point and/or margin?
In any case, it seems healthy to see in the near term. Competition is a good thing.
08 September, 2009
Experiences using the ADP1 on AT&T Network
I have had the Android Developer Phone (ADP1) for about 9 months now. I have been using it on the AT&T pay as you go plan with pretty good success. So far here is what I have discovered with regard to this combo:
Good:
* The phone works fine on the AT&T network for making and receiving calls.
* The AT&T data plan is a pretty good deal. For $20 you get 100MB for 1 month - which lasts well beyond the month for me.
* Downloading and installing both free and paid apps works fine.
Bad:
* No 3G. I've only had EDGE access. Perhaps I need to re-configure my APN, but I heard that the G1 does not support the 3G frequencies necessary for the AT&T network.
* The annoying "Last Transaction" messages unless you patch it (see my earlier post).
* Android updates need to be manually applied if you want them. You have to go to the HTC website(http://www.htc.com/www/support/android/adp.html), download a couple of files and go through their update process. It's no biggie really, just 1 more thing.
I could go on, but anything else would be universally true for any ADP1 (or presumably a T-Mobile G1).
Good:
* The phone works fine on the AT&T network for making and receiving calls.
* The AT&T data plan is a pretty good deal. For $20 you get 100MB for 1 month - which lasts well beyond the month for me.
* Downloading and installing both free and paid apps works fine.
Bad:
* No 3G. I've only had EDGE access. Perhaps I need to re-configure my APN, but I heard that the G1 does not support the 3G frequencies necessary for the AT&T network.
* The annoying "Last Transaction" messages unless you patch it (see my earlier post).
* Android updates need to be manually applied if you want them. You have to go to the HTC website(http://www.htc.com/www/support/android/adp.html), download a couple of files and go through their update process. It's no biggie really, just 1 more thing.
I could go on, but anything else would be universally true for any ADP1 (or presumably a T-Mobile G1).
Using the Android Developer Phone 1 on AT&T
The Android Dev Phone (ADP1) working on AT&T, you have to add the AT&T access point entry to your phone when you get it. Here are the steps you need to do:
1. Go into settings and select Mobile Networks
2. Select Access Point Names
3. Click the menu button and select new APN
4. Enter the following info and save:
Name: AT&T
APN: wap.cingular
Password: CINGULAR1
Leave all other fields at their defaults.
If you are trying to do this to activate a brand-new ADP1, the steps to define the APN are a little bit different but easy nonetheless if memory serves. You can activate the phone without the cell network (using wifi), but it requires a little more effort.
1. Go into settings and select Mobile Networks
2. Select Access Point Names
3. Click the menu button and select new APN
4. Enter the following info and save:
Name: AT&T
APN: wap.cingular
Password: CINGULAR1
Leave all other fields at their defaults.
If you are trying to do this to activate a brand-new ADP1, the steps to define the APN are a little bit different but easy nonetheless if memory serves. You can activate the phone without the cell network (using wifi), but it requires a little more effort.
23 July, 2009
Avoiding ATT "last transaction" messages with the Android ADP1
I have been using ATT pay as you go for almost a year. About 6 months ago, I picked up an ADP1 and have been using it on my ATT pay as you go plan ever since. It worked just fine for the first few months, especially considering the fact that ATT has a decent data plan that you can get with it (2G only for the ADP1, however).
The one annoying thing was ATT "last transaction" balance nag messages every time you use the phone. With a regular phone, it is not too bad since you only get these nag messages when you make voice calls. With the ADP1 (and presumably any smart phone) these messages come much more frequently due to data access. If you haven't used the phone is a while, you end up with a huge stack of these messages that have to be dispatched before you can use the phone for anything but answering calls.
So I was left with two choices - either disable data access on the ATT network, or fix the problem. I decided to fix the problem. I downloaded the Android source for version 1.1, found the spot in the code to make the change, recompiled the relevant module, and installed it. Just this week I did the same for 1.5 (cupcake).
It turns out that these nag messages are unsolicited USSD messages. The PhoneUtils class in the Android Phone app is what handles USSD messages in Android. I modified it so that USSD messages that result in a simple alert beginning with the text "The last transaction cost" are discarded.
If you would like to do this yourself, I have attached the modified PhoneUtils class, as well as the complete Phone.apk. Either way, once you have newly modified the Phone.apk, follow the following instructions to get it loaded onto your ADP1:
Prerequisites:
* Android development kit
* Phone.apk
* Mini sdcard
* USB cable
Installing the patched Phone app:
1. Copy Phone.apk to your sdcard.
2. Attach your Phone to your computer via usb
3. Open a shell on the phone witht the command
adb shell
4. Login as root
su -
5. Mount the system dir as writeable
mount -o remount,rw /dev/block/mtdblock3 /system
6. Go to the dir where the built-in apps are stored
cd /system/app
7. Backup the existing Phone app (in case you change your mind)
cat Phone.apk > /sdcard/Phone.apk.bkp
8. Remove the old Phone app
rm Phone.apk
9. Install the replacement Phone app
cat /sdcard/Phone_1.5_Att.apk > Phone.apk
10. Switch mount back to readonly
mount -o remount,ro /dev/block/mtdblock3 /system
If you get an error on the last step that filesystem is busy, simply reboot your phone to restore the system dir as read-only.
That's it, your all set to not be annoyed by ATT nag messages.
One final note, since you won't be getting any last transaction messages, you may want to actually know your balance. If so, you can simply ask for it by dialing *777# on your phone.
The one annoying thing was ATT "last transaction" balance nag messages every time you use the phone. With a regular phone, it is not too bad since you only get these nag messages when you make voice calls. With the ADP1 (and presumably any smart phone) these messages come much more frequently due to data access. If you haven't used the phone is a while, you end up with a huge stack of these messages that have to be dispatched before you can use the phone for anything but answering calls.
So I was left with two choices - either disable data access on the ATT network, or fix the problem. I decided to fix the problem. I downloaded the Android source for version 1.1, found the spot in the code to make the change, recompiled the relevant module, and installed it. Just this week I did the same for 1.5 (cupcake).
It turns out that these nag messages are unsolicited USSD messages. The PhoneUtils class in the Android Phone app is what handles USSD messages in Android. I modified it so that USSD messages that result in a simple alert beginning with the text "The last transaction cost" are discarded.
If you would like to do this yourself, I have attached the modified PhoneUtils class, as well as the complete Phone.apk. Either way, once you have newly modified the Phone.apk, follow the following instructions to get it loaded onto your ADP1:
Prerequisites:
* Android development kit
* Phone.apk
* Mini sdcard
* USB cable
Installing the patched Phone app:
1. Copy Phone.apk to your sdcard.
2. Attach your Phone to your computer via usb
3. Open a shell on the phone witht the command
adb shell
4. Login as root
su -
5. Mount the system dir as writeable
mount -o remount,rw /dev/block/mtdblock3 /system
6. Go to the dir where the built-in apps are stored
cd /system/app
7. Backup the existing Phone app (in case you change your mind)
cat Phone.apk > /sdcard/Phone.apk.bkp
8. Remove the old Phone app
rm Phone.apk
9. Install the replacement Phone app
cat /sdcard/Phone_1.5_Att.apk > Phone.apk
10. Switch mount back to readonly
mount -o remount,ro /dev/block/mtdblock3 /system
If you get an error on the last step that filesystem is busy, simply reboot your phone to restore the system dir as read-only.
That's it, your all set to not be annoyed by ATT nag messages.
One final note, since you won't be getting any last transaction messages, you may want to actually know your balance. If so, you can simply ask for it by dialing *777# on your phone.
Subscribe to:
Posts (Atom)