我正在编写一个小部件,只要用户更改振铃器音量或振动设置,就需要更新.
捕获android.media.VIBRATE_SETTING_CHANGED对于振动设置工作得很好,但我没有找到任何方式在铃声音量变化时得到通知,虽然我可以尝试捕捉当用户按下音量增大/音量减小物理键时,还有很多其他选项在不使用这些键的情况下更改音量.
你知道是否有任何广播行动为此定义或以任何方式创建一个或没有它解决问题?
我想注册一个广播接收器来处理VOLUME_CHANGED_ACTION事件,只为volume_voice流类型(我凭经验看是指数0的Settings.System.VOLUME_SETTINGS).
标签EXTRA_VOLUME_STREAM_TYPE是隐藏的,所以我使用了显式字符串"android.media.EXTRA_VOLUME_STREAM_TYPE".这一切都工作正常在Android 2.3.4(获得价值0为volume_voice如预期),但在2.3.5,这额外的保存价值10,这给出了一个ArrayIndexOutOfBoundsException上Settings.System.VOLUME_SETTINGS.此外,我看到volume_voice仍然是指数0在Settings.System.VOLUME_SETTINGS.
有没有更强大的处理方式VOLUME_CHANGED_ACTION为volume_voice流类型?
编辑或任何其他方式来做标题要求的?
寻找"最全面和兼容(即所有Android版本...)"方式来收听音量变化,我找到了两种不同的方法来处理这个问题:
哪种方法更可取?
为什么?
更新1:由于下面的评论,我发现onKeyDown()实际上接管了卷密钥,这可能不是一个完整的解决方案,因为其中一个帖子提到可以通过除硬件按钮之外的接口来更改卷(不是提到谷歌似乎正逐渐取消那些"接管"能力.
OTOH,android.media.VOLUME_CHANGED_ACTION是一个黑客,甚至没有记录.这可能意味着它将在Android 5左右停止工作 ......
更新2: registerMediaButtonEventReceiver根本不起作用!(对于音量硬件按钮,我只是尝试过).
其他见解?
android broadcastreceiver android-audiomanager android-broadcast