如何以编程方式在静音模式和免打扰模式之间切换 Android 设备

问题描述 投票:0回答:2

我正在尝试让手机在静音模式 、免打扰模式 和两者 之间切换。

我找到的唯一代码是:

AudioManager.ringerMode = AudioManager.RINGER_MODE_SILENT

从名字上看,我以为它会切换静音模式,但实际上它会切换免打扰模式。

文档几乎毫无用处,我在较新的 Android 版本上找不到任何解决此问题的问题。

如何在 Android 21+ 上在这些状态之间切换?

android kotlin android-audiomanager do-not-disturb
2个回答
0
投票

如果你想模拟

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

0
投票
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 版本和设备制造商而异。此代码提供了通用方法,可能需要根据您的具体用例和在不同设备上的测试进行调整]

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.