これの周りに頭を曲げるのに少し問題があります。
私のボリュームコントロールアプリでは、システムサウンドプロファイルをサイレントのみに設定しようとしていますが、邪魔しないでください。アプリには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);
}
これが私を少し気が狂わせるので、どんな援助もありがたいです。
...しかし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);
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デバイスを使用しています)。
これは確かに、Androidでよく知られている別のバグのようです。つまり、RINGER_MODE_SILENT
の設定では、ドキュメントに書かれているとおりのことは行われません。私は次の方法で望ましい動作を得ました:
RINGER_MODE_NORMAL
RINGER_MODE_SILENT
INTERRUPTION_FILTER_ALL
を設定して、誤って設定されたサイレントモードを無効にします。つまり.
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
お役に立てれば。