Sunday, April 21, 2013
Thursday, April 11, 2013
Finally making progress on Jelly Bean 4.2 Bluetooth interfaces
I finally purchased a Droid Bionic on eBay to use as my primary phone so I could put CM10.1 (Android 4.2.2) on the old Droid 3. Last night I finally got the IBluetoothA2dp interface working with CM10.1, sort of. I implemented what I have so far in A2DP Connect 1.0.14 (now available for download). It does not work on the first try since the binder to the interface finishes after the call to use it. I need to redo a bunch of things to fix that but at least I know how to use the interface now which is a huge step.
It starts with this
Intent i = new Intent(IBluetoothA2dp.class.getName());
if (context.bindService(i, mConnection, Context.BIND_AUTO_CREATE)) {
return ibta2;
This calls mConnection:
public static ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
ibta2 = IBluetoothA2dp.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
mConnection gets called when the service is connected or disconnected calling the functions within it. The problem is that these calls happen after the ibta2 is needed. So, the function I have in the code to get the ibta2 tries to use it before it is returned. This stays bound though so the 2nd attempt worked because the prior attempt actually bound the service and kept it.
More work to do be done but significant progress. It REALLY helps having a 4.2 device to test with. Before that I was just guessing and hoping someone else would test. I also did not have logcat to see what was going on.
It starts with this
Intent i = new Intent(IBluetoothA2dp.class.getName());
if (context.bindService(i, mConnection, Context.BIND_AUTO_CREATE)) {
return ibta2;
This calls mConnection:
public static ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
ibta2 = IBluetoothA2dp.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
mConnection gets called when the service is connected or disconnected calling the functions within it. The problem is that these calls happen after the ibta2 is needed. So, the function I have in the code to get the ibta2 tries to use it before it is returned. This stays bound though so the 2nd attempt worked because the prior attempt actually bound the service and kept it.
More work to do be done but significant progress. It REALLY helps having a 4.2 device to test with. Before that I was just guessing and hoping someone else would test. I also did not have logcat to see what was going on.
Saturday, January 5, 2013
Update
Here is the latest Play Store developer dashboard.

A2DP Connect has ramped up faster than A2DP Volume.
Here is the distribution of Android versions for A2DP Volume:

A2DP Connect has ramped up faster than A2DP Volume.
Here is the distribution of Android versions for A2DP Volume:
User feedback
That rating and comment was recently left for A2DP Connect. Apparently the user has never placed a widget on his home screens. Because of his lack of knowledge on how to use widgets, A2DP Connect now has a 1 star rating and a scathing comment.
What this really comes down to is people get frustrated trying to work high tech things. They read just enough to understand the basics (or in the case above not even that) and just use the device. I can relate to this as I sometimes do it myself. Who has time to read all that confusing stuff anyway. I would be embarrassed however to find out I gave an app a bad rating just because of my own ignorance.
When creating apps it is important to make them as intuitive as possible. In the case above, I need to think about how I could have guided that person to placing the widget on the home screen without annoying the rest of us who already know. Do I have the app just put a widget on the home screen for the user? Do I pop up a dialog after install that give the user a short tutorial?
Thursday, December 27, 2012
Google Talk Reader now implemented and working in A2DP Volume 2.9.1
I think A2DP Volume Chat plugin app can now go away. I implemented a Google Talk reader directly into A2DP Volume instead. This is much simpler as it uses a broadcast listener and some URI's to capture and parse the messages. That means you just have to have Google Talk signed in and active for it to work. I would like to test it some more before pushing to the Play Store. 2.9.1 is available for download on the Google Code page here: http://code.google.com/p/a2dpvolume/downloads.
Make sure you download the latest release as it is still in test. Please test it and let me know any comments, bad and good.
Make sure you download the latest release as it is still in test. Please test it and let me know any comments, bad and good.
Monday, December 24, 2012
Work in IM integration starting again
I implemented a message receiver in A2DP Volume version 2.9.0 and up (not yet released). I documented it here: http://code.google.com/p/a2dpvolume/wiki/Interfaces. I also tested it with some test code in A2DP Volume Chat. Now other apps can use this interface to alert via text-to-stream while a device is connected. So far I got the A2DP Volume changes working and tested. Now I need to get A2DP Volume Chat working. I am having trouble with receiving IM messages. It can send but not receive. Ironic since it does not even need to send IM's. I also have issues with instability with A2DP Volume Chat so far. It will connect to the server and log in the user fine. Sometimes however, it seems to randomly crash right when the app initially starts or shortly after login. It's very inconsistent and works most of the time. I am leveraging a hacked version of Smack for the IM client and I suspect there are gremlins in there. I may need to get more creative and instead make my own XMPP implementation. I hate to do that if it is not completely necessary though. Anyone want to help out?
Tuesday, December 18, 2012
Replaced ugly icons
My daughter finally had it with my ugly icons and made all new ones for A2DP Volume and A2DP Connect. I had found those old icon parts on a quick web search and then rescaled them. This left JPG noise and shadow effects in therm. Bottom line: they were terrible. She created new ones from scratch. I also had not optimized them properly for various screens. This bloated the app and added negative value in terms of icon quality. Removing all the extra graphics, and a few other improvements found my Android Lint resulted in 55kb reduction in the APK file.
Here is the latest snapshot from the Play Store developer console

A2DP Connect has only been out a few days. I will leave the Android 2.1 version of A2DP Volume out there a bit longer but it will eventually be retired.
Here is the latest snapshot from the Play Store developer console
A2DP Connect has only been out a few days. I will leave the Android 2.1 version of A2DP Volume out there a bit longer but it will eventually be retired.
Subscribe to:
Posts (Atom)