Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Volume change Listener: Is registerMediaButtonEventReceiver preferable to onKeyDown?

Looking for a "most comprehensive & compatible (i.e. all Android versions...)" way to listen to volume changes, I found 2 different approaches to handle this:

  1. registerMediaButtonEventReceiver
  2. onKeyDown + SettingsContentObserver

Which method is preferable?

And why?

UPDATE 1: Thanks to the comment below, I discovered that onKeyDown() actually takes over the volume key, which may not be a complete solution as one of the posts mentioned that volume could be changed via interfaces other than the hardware buttons (not to mention that Google seems to be gradually taking away those "take over" capabilities).

OTOH, android.media.VOLUME_CHANGED_ACTION is a hack and isn't even documented. Which probably means it will cease to work in Android 5 or so...

UPDATE 2: registerMediaButtonEventReceiver doesn't work at all! (for the volume hardware buttons that is, I just tried it).

Additional insights?

like image 219
uTubeFan Avatar asked Mar 05 '13 21:03

uTubeFan


1 Answers

It would be great to have in future APIs a BroadcastReceiver for volume streams, but today maybe the best solution is to register a ContentObserver for the settings (that includes VOLUME_NOTIFICATION):

mSettingsContentObserver = new SettingsContentObserver( new Handler() ); 
this.getApplicationContext().getContentResolver().registerContentObserver( 
    android.provider.Settings.System.CONTENT_URI, true,
    mSettingsContentObserver );

see this answer for more info: https://stackoverflow.com/a/7017516/117382

Edit: Corrected with working code. Maybe this solution is better: https://stackoverflow.com/a/17398781/117382

like image 146
jBilbo Avatar answered Oct 12 '22 22:10

jBilbo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!