卷更改监听器:registerMediaButtonEventReceiver比onKeyDown更可取吗?

uTu*_*Fan 7 android broadcastreceiver android-audiomanager android-broadcast

寻找"最全面和兼容(即所有Android版本...)"方式来收听音量变化,我找到了两种不同的方法来处理这个问题:

  1. registerMediaButtonEventReceiver
  2. onKeyDown + SettingsContentObserver

哪种方法更可取?

为什么?

更新1:由于下面的评论,我发现onKeyDown()实际上接管了卷密钥,这可能不是一个完整的解决方案,因为其中一个帖子提到可以通过除硬件按钮之外的接口来更改卷(不是提到谷歌似乎正逐渐取消那些"接管"能力.

OTOH,android.media.VOLUME_CHANGED_ACTION是一个黑客,甚至没有记录.这可能意味着它将在Android 5左右停止工作 ......

更新2: registerMediaButtonEventReceiver根本不起作用!(对于音量硬件按钮,我只是尝试过).

其他见解?

jBi*_*lbo 2

如果将来的 API 能够用于BroadcastReceiver卷流,那就太好了,但现在最好的解决方案可能是注册ContentObserver设置(包括 VOLUME_NOTIFICATION):

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

有关更多信息,请参阅此答案:/sf/answers/491226151/

编辑:用工作代码更正。也许这个解决方案更好:/sf/answers/1217914701/