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

Mic*_*vin 7 android

我想注册一个广播接收器来处理VOLUME_CHANGED_ACTION事件,只为volume_voice流类型(我凭经验看是指数0Settings.System.VOLUME_SETTINGS).

标签EXTRA_VOLUME_STREAM_TYPE是隐藏的,所以我使用了显式字符串"android.media.EXTRA_VOLUME_STREAM_TYPE".这一切都工作正常在Android 2.3.4(获得价值0volume_voice如预期),但在2.3.5,这额外的保存价值10,这给出了一个ArrayIndexOutOfBoundsExceptionSettings.System.VOLUME_SETTINGS.此外,我看到volume_voice仍然是指数0Settings.System.VOLUME_SETTINGS.

有没有更强大的处理方式VOLUME_CHANGED_ACTIONvolume_voice流类型?

编辑或任何其他方式来做标题要求的?

Com*_*are 8

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

VOLUME_CHANGED_ACTIONAndroid SDK中没有.

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

EXTRA_VOLUME_STREAM_TYPEAndroid SDK中没有.

有没有更健壮的方法来处理volume_voice流类型的VOLUME_CHANGED_ACTION?

VOLUME_CHANGED_ACTIONAndroid SDK中没有.

无论你想要做什么都没有文档,不受支持,可能不适用于任何给定版本的Android(过去/现在/未来),并且可能无法在任何给定设备上运行(因为制造商可以更改SDK中没有的任何内容).根据定义,它永远不会"强大".


Mic*_*vin 3

我的临时(可能是糟糕的)解决方法是在 catch 块中捕获ArrayIndexOutOfBoundsException, 和 来测试流类型是否具有值Settings.System.VOLUME_SETTINGS.length

这是我迄今为止最好的。我不知道它是否也可以捕获其他流类型,也不知道它是否可以在 2.3.3-2.3.5 以外的其他 Android 版本上工作。