web-dev-qa-db-ja.com

Android=サイレントモードを有効にして、サイレントモードをトリガーしない

これの周りに頭を曲げるのに少し問題があります。

私のボリュームコントロールアプリでは、システムサウンドプロファイルをサイレントのみに設定しようとしていますが、邪魔しないでください。アプリにはDND設定の変更と通知へのアクセスがあり、問題はありません。

システム設定にはサイレントプロファイルがあり、DNDはオフのままですが、オーディオマネージャを使用してそれを行う方法が見つかりませんか?

モードをサイレントに設定し、NotificationManagerを使用してDND設定を変更しようとしました。システムをサイレントセットバイブレーションに設定した後、DNDを無効にし、dndを無効にしてからサイレントを設定すると、DNDが再度アクティブになります。

参照用コード:

int current = audioManager.getRingerMode();
if (current == AudioManager.RINGER_MODE_VIBRATE) {
         newIcon = Icon.createWithResource(this, R.drawable.silent);
         //ENABLES DND WHEN IT SHOULD ENABLE SILENT
         audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}

これが私を少し気が狂わせるので、どんな援助もありがたいです。

12

...しかしDNDはnotサイレントです。 DNDは、優先発信者の呼び出し音を許可するように設定できますが、サイレントでは、発信者の呼び出し音は許可されません。したがって、ユーザーとアプリには選択肢があります。

このコードは、(API 28を実行しているエミュレータ上で)私の呼び出し音を正常にミュートするように見え、do-not-disturbモードを設定しません:-

audio.adjustStreamVolume(AudioManager.STREAM_RING,
                        AudioManager.ADJUST_MUTE, 0);

呼び出し音を元に戻すには、次のようにします。

enter audio.adjustStreamVolume(AudioManager.STREAM_RING,
                        AudioManager.ADJUST_UNMUTE, 0); 
1
user3791713

DnDに関しては、世界観は2つあります。Android Nの前と後Android N. Before Android Nリンガーにのみ関心がある場合はAudioMamnager.setRingerMode(RINGER_MODE_SILENT)を使用できます。ただし、Android N、パブリックAPI AudioMamnager.setRingerMode(silent)== DNDなので、したがって、完全な沈黙のためには、DnDを切り替える必要があります。

また、DnDの切り替えを続行する場合は、NotificationPolicyAccessも必要です。

アドレスコメントへの更新

Androidユーザーには多くの自由度があります。アプリにはない緯度。

あなたの状況ではgoodニュースがあり、悪いニュースがあります。

悪いニュース:

残念ながら、私が推奨できる回避策はありません。沈黙== DNDであるのは、CTSがテストした長年の動作です。 (M->すべてのアプリがMODE_SILENTを設定でき、DNDがオンになります)(N +->アプリで最初にMODE_SILENTチェックを使用すると、DNDを変更する権限があります)。

良いニュース

まず、ユースケースを共有していただきありがとうございます。結局のところ、Googleのカメラアプリには録画機能もあります。そして、それは録音中にDNDを使用します。したがって、DNDは、状況に応じて実行可能なオプションになるはずです。これを確認できるはずです(私はPixelデバイスを使用しています)。

  1. ビデオの録画を開始します。
  2. クイック設定をプルダウンして、録音の進行中にDNDタイルを確認します。
0
Isai Damier

これは確かに、Androidでよく知られている別のバグのようです。つまり、RINGER_MODE_SILENTの設定では、ドキュメントに書かれているとおりのことは行われません。私は次の方法で望ましい動作を得ました:

  • 最初の設定RINGER_MODE_NORMAL
  • Then設定RINGER_MODE_SILENT
  • 次に、INTERRUPTION_FILTER_ALLを設定して、誤って設定されたサイレントモードを無効にします。

つまり.

audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);

お役に立てれば。

0
Biqqles