Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating 'middleman' headset button controller in Android

All,

I have searched for an answer to this, but I'm not getting anything exact... It's my first time writing an Android app, so please be gentle :)

I'm pretty bummed about the minimal headset support in Android - unlike e.g. iPhone, it only natively seems to support a single button, so no volume control on headset compatibility. Additionally, if I'm listening to music and a call comes in, the OS pauses the music automatically, but the headset button still functions ONLY as a media button - I can't use it to answer/end the call. If I answer the call via the screen and press the headset button, the music starts again, but the call continues...

I'd like to create a 'middleman' app that can pick up that the headset button has been pressed (via Keyevent.KEYCODE_HEADSETHOOK) and can then determine whether to perform the default ACTION_MEDIA_BUTTON action (toggle play/pause in my chosen media player) or, if there is an incoming call, pause the music and answer the phone (and then, when pressed again, end the call and restart the media player). Perhaps even check for ACTION_MULTIPLE on the headset button to assign different options (ACTION_MEDIA_NEXT, ACTION_MEDIA_PREVIOUS etc.). Perhaps also be able to determine whether different buttons on the headset have been pressed (if the headset is e.g. a fancy iPhone headset) and 'translate' those button presses into the appropriate ACTION_MEDIA_*). This might not be possible if the OS can't tell the difference between different buttons, obviously.

Obviously such an app would have to receive the intent with a high enough priority that it would be able to abort the broadcast before the current media player gets it.

I've been tinkering with creating assorted BroadcastReceiver classes and intent filters etc., but part of the problem is that the bult-in Android emulator that comes with Eclipse doesn't seem to have the ability to simulate a user plugging in the headset and/or subsequently clicking the headset button. Therefore, every time I get somethign that looks promising, I have to put it onto my actual phone and try it out - time-consuming and a hassle.

3 questions then:

  1. Am I missing somethign obvious - is this a real problem and if so, has it already been solved?

  2. If it IS a problem, is it possible to write such a middleman app?

  3. Are there any other Android emulators that can check for headset-related activities?

Thanks,

Rory

like image 602
roryhewitt Avatar asked Jan 24 '11 20:01

roryhewitt


1 Answers

i´ve already written exactly this kind of app. Its called like the topic of this thead: Headset Button Controller ;-)

http://www.androidpit.com/en/android/market/apps/app/com.kober.headset/Headset-Button-Controller

Cheers Christoph

like image 134
Christoph Avatar answered Oct 04 '22 20:10

Christoph