How to receive volume changed events for the voice (in-call) stream type?
Asked Answered
T

2

8

I'm trying to register a broadcast receiver to handle the VOLUME_CHANGED_ACTION event, only for the volume_voice stream type (which I empirically see to be index 0 in Settings.System.VOLUME_SETTINGS).

The label EXTRA_VOLUME_STREAM_TYPE is hidden, so I have used the explicit string "android.media.EXTRA_VOLUME_STREAM_TYPE" instead. It all worked fine on Android 2.3.4 (got value 0 for volume_voice as expected), but on 2.3.5 the value that this extra holds is 10, which gives an ArrayIndexOutOfBoundsException on Settings.System.VOLUME_SETTINGS. Moreover, I see that volume_voice is still index 0 in Settings.System.VOLUME_SETTINGS.

Is there a more robust way to handle VOLUME_CHANGED_ACTION for volume_voice stream types?

Edit Or any other way to do what the title asks for?

Triaxial answered 23/1, 2012 at 13:48 Comment(0)
T
3

My temporary (and probably bad) workaround is to catch the ArrayIndexOutOfBoundsException, and in the catch block to test the stream type to have value of Settings.System.VOLUME_SETTINGS.length.

This is the best I have so far. I don't know if it might catch other stream types as well, and also if it is going to work on other Android versions than 2.3.3-2.3.5.

Triaxial answered 31/1, 2012 at 9:54 Comment(0)
D
10

I'm trying to register a broadcast receiver to handle the VOLUME_CHANGED_ACTION event

There is no VOLUME_CHANGED_ACTION in the Android SDK.

The label EXTRA_VOLUME_STREAM_TYPE is hidden, so I have used the explicit string "android.media.EXTRA_VOLUME_STREAM_TYPE" instead.

There is no EXTRA_VOLUME_STREAM_TYPE in the Android SDK.

Is there a more robust way to handle VOLUME_CHANGED_ACTION for volume_voice stream types?

There is no VOLUME_CHANGED_ACTION in the Android SDK.

Whatever you are trying to do is undocumented, unsupported, may not work on any given version of Android (past/present/future), and may not work on any given device (since manufacturers can change anything that is not in the SDK). It will never be "robust", by definition.

Debenture answered 23/1, 2012 at 15:58 Comment(0)
T
3

My temporary (and probably bad) workaround is to catch the ArrayIndexOutOfBoundsException, and in the catch block to test the stream type to have value of Settings.System.VOLUME_SETTINGS.length.

This is the best I have so far. I don't know if it might catch other stream types as well, and also if it is going to work on other Android versions than 2.3.3-2.3.5.

Triaxial answered 31/1, 2012 at 9:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.