我正在尝试让手机在静音模式 、免打扰模式 和两者 之间切换。
我找到的唯一代码是:
AudioManager.ringerMode = AudioManager.RINGER_MODE_SILENT
从名字上看,我以为它会切换静音模式,但实际上它会切换免打扰模式。
文档几乎毫无用处,我在较新的 Android 版本上找不到任何解决此问题的问题。
如何在 Android 21+ 上在这些状态之间切换?
如果你想模拟
silent mode
、Do Not Disturb mode
和Normal mode
,你可以尝试这个配置。
// To set the phone to silent mode
audioManager.ringerMode = AudioManager.RINGER_MODE_SILENT
// To set the phone to Do Not Disturb mode
audioManager.ringerMode = AudioManager.RINGER_MODE_SILENT
audioManager.ringerMode = AudioManager.RINGER_MODE_VIBRATE
// To set the phone to normal mode
audioManager.ringerMode = AudioManager.RINGER_MODE_NORMAL
import android.app.NotificationManager;
import android.content.Context;
import android.media.AudioManager;
import android.os.Build;
import android.provider.Settings;
public class SoundControl {
// Constants for different modes
private static final int MODE_SILENT = 0;
private static final int MODE_VIBRATE = 1;
private static final int MODE_NORMAL = 2;
private final Context context;
private final AudioManager audioManager;
private final NotificationManager notificationManager;
public SoundControl(Context context) {
this.context = context;
this.audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
this.notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}
// Toggle between silent, vibrate, and normal modes
public void toggleSoundMode() {
int currentMode = getCurrentSoundMode();
switch (currentMode) {
case MODE_SILENT:
setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
break;
case MODE_VIBRATE:
setRingerMode(AudioManager.RINGER_MODE_NORMAL);
break;
case MODE_NORMAL:
setRingerMode(AudioManager.RINGER_MODE_SILENT);
break;
}
}
// Set the Ringer Mode
private void setRingerMode(int mode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
} else {
// For versions prior to Android M
Settings.Global.putInt(context.getContentResolver(), "zen_mode", Settings.Global.ZEN_MODE_OFF);
}
audioManager.setRingerMode(mode);
}
// Get the current sound mode
private int getCurrentSoundMode() {
int ringerMode = audioManager.getRingerMode();
switch (ringerMode) {
case AudioManager.RINGER_MODE_SILENT:
return MODE_SILENT;
case AudioManager.RINGER_MODE_VIBRATE:
return MODE_VIBRATE;
case AudioManager.RINGER_MODE_NORMAL:
return MODE_NORMAL;
default:
return MODE_NORMAL;
}
}
}
这里,
toggleSoundMode()
方法负责在静音、振动和正常模式之间切换。它使用 audioManager.setRingerMode(mode)
设置振铃模式并相应地调整免打扰设置。
[请注意,声音模式和免打扰设置的行为可能因 Android 版本和设备制造商而异。此代码提供了通用方法,可能需要根据您的具体用例和在不同设备上的测试进行调整]
希望有帮助!