14

タブレットのヘッドフォンジャックから電力を引き出す外部デバイスを使用するSamsungタブレット用のAndroidアプリケーションがあります。外部デバイスの電源がオンになると(プログラムで音量を最大にすることにより)、Androidは警告ポップアップを短時間表示します。表示されます。

問題のあるコード行は次のとおりです。

mAudioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);

途中まで上げることはできません。実際、最大設定よりも低い音量設定でも、タブレットが警告を表示するのを見ました(手動で音量を変更した場合)。

はい、元のボリュームを記録し、外部デバイスの使用が終了したら復元します。

提案をありがとう。

4

3 に答える 3

2

システム メッセージを無効にすることはできず、ユーザーが手動で音量を下げたときにも問題が発生するため、一連の制御を行うことをお勧めします。音量を最大にするには:

public void maxVolume() {
    AudioManager audioManager = (AudioManager)context.getSystemService(this.AUDIO_SERVICE);
    while ( audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) < audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)) {
        audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0);
    }
}

ユーザーが手動で音量を変更できないようにするには:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) 
         || (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
         || (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)) {
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

onCreate メソッドで maxVolume() を呼び出し、後でジャック出力手順の使用を開始する直前に呼び出して、システムが音量を変更していないことを確認できます。または、音量の変化をリッスンするリスナーを登録し、 maxVolume() を静的にして、リスナーから呼び出すこともできます。それがあなたを助けることを願っています!

于 2014-04-02T22:19:44.747 に答える
1

この質問はかなり古いことは知っていますが、私はこの問題に出くわしました。これに遭遇した他の誰かを助ける場合に備えて、私が見つけたもので与えられた答えに追加すると思いました.

ここの投稿の 1 つは、警告が AOSP にないことを述べていますが、これは真実ではありません。ここで VolumePanel::SafetyWarning クラスを参照してください: VolumePanel::SafetyWarning

SafetyWarning クラスを熟読すると、AudioManager クラス内に disableSafeMediaVolume という隠しメソッドがあることがわかります。リフレクションを使用して、この隠しメソッドを簡単に呼び出すことができますが、そうすると、システム権限「android.permission.STATUS_BAR_SERVICE」が必要になるため、セキュリティ例外が発生します。

そうは言っても、私が知る限り、このシステム許可がない限り、ダイアログをプログラムで抑制することはできません。

製品管理の恩恵を受けて最終的に行ったことは、ボリューム設定を SharedPreferences にキャッシュし、アプリケーションの起動時にキャッシュからリセットすることです。警告ダイアログのしきい値を超えた場合、警告が表示され、ユーザーは [OK] を押すだけで必要な音量設定を取得できますが、少なくとも手動で音量を自分でリセットする必要はありません。 .

このダイアログが表示されない理由について、いくつかの注意事項があります。デバイスにヘッドフォン (またはイヤフォン、または有線ヘッドセット) が接続されていて、メディア ボリューム ストリームを特定のしきい値 (Samsung Galaxy Tab A ではこのしきい値は 60%) を超えて設定しようとした場合にのみ表示されます。ダイアログで [OK] を押すと、デバイスを再起動するか、ヘッドフォンを取り外して再度接続しない限り (音量をしきい値以上に設定して)、再度表示されることはありません。

これが誰かに役立つことを願っています。

于 2016-01-21T15:39:33.373 に答える
0

これを多くの回答と見なすことができるかどうかはわかりませんが、アクセスできるものではなくシステムによって自動的に表示されるため、そのメッセージを削除できないと確信しています。私のSamsung Galaxy S3も同じことをします。

また、ネットで読むことができるものから、一部のAndroidデバイスは、ジャックスティックを差し込むと音量を下げて、「聴覚に害を与えないようにします」.

おそらく直前または直後に独自の通知を表示して、通知をオーバーライドできますか? 通知は単なる標準Toastです。

于 2013-02-20T08:59:37.477 に答える