Reputation: 559
After searching for a very long time for a way to play notification noises only through the headphones (when plugged in), on a stream separate from STREAM_MUSIC
, in a way that could interrupt and be completely audible over any background music, Android finally came out with the AudioAttributes API. By using the following code, I'm able to achieve exactly what I want for notifications, at least in API 21 or higher (STREAM_MUSIC
is the best option I've found for lower versions):
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
Unfortunately, there doesn't appear to be any way to adjust the volume of the sonification in my app's settings. I currently use the AudioManager
in the following way, but it only allows volume adjustments to streams, and none of STREAM_ALARM
, STREAM_NOTIFICATION
, STREAM_RING
, or STREAM_MUSIC
applies to whatever routing strategy is used for the sonification:
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, originalVolume, 0);
Does anyone have any suggestion on how to set the volume corresponding to the AudioAttributes
output? Keep in mind that the audio is actually played in a BroadcastReceiver
that's used for the actual notification, and the audio setting would be specified in just some settings Activity
.
Upvotes: 4
Views: 6935
Reputation: 559
Well, it appears that I missed a critical table in the API documentation: https://source.android.com/devices/audio/attributes.html
It seems that STREAM_SYSTEM
is the equivalent of what I was attempting to do with AudioAttributes
. Basically, using the code I have above is sufficient for API 21 and forward, and use of STREAM_SYSTEM
does everything necessary for the AudioManager
and APIs prior to 21.
Upvotes: 5