AudioManagerを使用して音量を上げようとしています。
しかし、ネイティブAndroidボリュームUI(ボリュームシークバー)トーストが表示されています。これを無効にします。キーイベントを使用したアクティビティでこれが可能であることは知っていますが、サービスを通じて実行したいと思います。トーストを無効にする方法は?トーストのスクリーンショットは次のとおりです。
AudioManager
-class は、特定のストリームの音量を調整する次のメソッドを提供します。
adjustVolume(int, int)
adjustStreamVolume(int, int, int)
adjustSuggestedStreamVolume(int, int, int)
setStreamVolume(int, int, int)
これらのメソッドはすべてflag
、最後の引数として -parameter を取ります。あなたにとって興味深いフラグは次のFLAG_SHOW_UI
とおりです。
現在のボリュームを含むトーストを表示します。
したがって、トーストを取り除くには、このフラグ (または int-value 1) を指定しない0
で、他のすべてのフラグ (必要な場合) を指定するか、次のように指定します。
AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
manager.adjustVolume(AudioManager.ADJUST_RAISE, 0);
上記のコード スニペットは、Android 4.0.4 (Motorola Xoom) および Android 2.3.5 (HTC Desire HD) で動作します。
少し遅れていることはわかっていますが、これを使用してボリュームトーストを非表示にできたと思います:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
//volumeDown();
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
//volumeUp();
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
volumeDown();
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
volumeUp();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void volumeUp(){
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, SOME_RANDOM_VALUE, AudioManager.FLAG_VIBRATE);
}
onKeyUp と onKeyDown から 1 つのメソッドだけを無効にしても、トーストの表示は妨げられませんでした (フラグを使用している場合でも)。
Android がトーストを 2 回表示しようとするように、少し奇妙です。