AudioManagerを使った音量変更
AudioManagerを使うと、指定したStreamの音量を変更することもできます。
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, nextVol, 0);
// nextVolの上限は端末やストリームによって異なります。
int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
変更できる範囲は0~maxまでです。
指定できるフラグ
AudioManager.setStreamVolumeなどに設定できるフラグには以下のようなものがあります。
FLAG_PLAY_SOUND
Whether to play a sound when changing the volume.
変更時にピッピッと音がなる。FLAG_REMOVE_SOUND_AND_VIBRATE
Removes any sounds/vibrate that may be in the queue, or are playing (related to changing volume).
サウンドも振動もさせない。FLAG_SHOW_UI
Show a toast containing the current volume.
UIを表示させる。FLAG_VIBRATE
Whether to vibrate if going into the vibrate ringer mode.
変更時に振動させる。
これらを使うことでユーザに音量調整のフィードバックを与えたり、逆になくしたりと可能になっています。
音量警告画面が表示されない
イヤホン挿入時に音量を一定以上にあげるとwarning画面が表示されます。
この警告画面で承認を得ないと、最大まで音量を上げることができません。
この仕組みは自動なので特に気にする必要はないかと思います。
しかし、特定環境でこの警告画面が表示されないことがあります。
AudioManager.FLAG_SHOW_UIを使えば表示されますが、音量変化のダイアログも出てしまうので、意図したものと少し違ってしまいます。
調べてみると、Android5.0以降は隠しフラグが追加されていました。
AudioManager.FLAG_SHOW_UI_WARNINGS
/**
* Like FLAG_SHOW_UI, but only dialog warnings and confirmations, no
* sliders.
*/
public static final int FLAG_SHOW_UI_WARNINGS = 1 << 10;
こちらのフラグを追加すると警告ダイアログだけ表示されるようになりました。
おそらくFLAG_SHOW_UIを使って欲しいのだと思いますが、同じ問題に遭遇された方は参考になれば幸いです。