サイレントモードでもサウンド通知を再生するアプリを書いています。Silent を一時的にオフにして、後でロールバックしたくありません。そのためにALARMストリームを使用しています。デフォルトでは ALARM ストリームは無音でミュートされていないため、通常は適切に機能します。しかし、そうである場合もあります。
ストリームが現在ミュートされている (サイレント モード) かどうかを確認するにはどうすればよいですか? (通常モードに切り替えずに) ミュートを解除するにはどうすればよいですか?
私自身の質問に答える:
解決策は、Android OS ソース (標準のアラーム アプリ) で見つかりました。
オプション「Alarm in Silent」を確認して設定する方法を見つけました。
private static final int ALARM_STREAM_TYPE_BIT =
1 << AudioManager.STREAM_ALARM;
public static void setAlarmInSilent(boolean on) {
int ringerModeStreamTypes = Settings.System.getInt(
context.getContentResolver(),
Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
if (on) {
ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT;
} else {
ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT;
}
Settings.System.putInt(context.getContentResolver(),
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
ringerModeStreamTypes );
}
Android src へのリンク: https://android.googlesource.com/platform/packages/apps/AlarmClock/+/donut-release2/src/com/android/alarmclock/SettingsActivity.java