如何接收语音(通话)流类型的音量更改事件?

8

我试图注册一个广播接收器来处理VOLUME_CHANGED_ACTION事件,只针对volume_voice流类型(经验显示在Settings.System.VOLUME_SETTINGS中为索引0)。

标签EXTRA_VOLUME_STREAM_TYPE被隐藏了,因此我使用了显式字符串"android.media.EXTRA_VOLUME_STREAM_TYPE"。在Android 2.3.4上工作得很好(如预期地获得了volume_voice的值0),但是在2.3.5上,这个额外的值是10,这会导致Settings.System.VOLUME_SETTINGS抛出ArrayIndexOutOfBoundsException异常。 此外,我发现在Settings.System.VOLUME_SETTINGS中,volume_voice仍然是索引0

有没有更可靠的方法来处理volume_voice流类型的VOLUME_CHANGED_ACTION

编辑或者说还有其他方法实现标题所要求的功能吗?

2个回答

10

我正在尝试注册一个广播接收器来处理VOLUME_CHANGED_ACTION事件。

Android SDK中没有VOLUME_CHANGED_ACTION

标签 EXTRA_VOLUME_STREAM_TYPE 被隐藏了,所以我使用了显式字符串 "android.media.EXTRA_VOLUME_STREAM_TYPE"。

Android SDK中没有EXTRA_VOLUME_STREAM_TYPE

有没有更强大的方法来处理音量语音流类型的VOLUME_CHANGED_ACTION?

Android SDK中没有VOLUME_CHANGED_ACTION

无论你想做什么,它都没有文档支持,也不受支持,不能保证在任何Android版本(过去/现在/未来)或任何设备上工作(因为制造商可以更改SDK之外的任何内容)。根据定义,它永远不会“强大稳健”。


3

我的临时解决方法(可能不太好)是捕获ArrayIndexOutOfBoundsException,并在catch块中测试流类型是否具有Settings.System.VOLUME_SETTINGS.length的值。

这是我目前最好的方法。我不知道它是否会捕获其他流类型,也不知道它是否适用于除2.3.3-2.3.5之外的其他Android版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接