Android 开启勿扰模式时不播放音效

标签 android android-mediaplayer android-audiomanager silent android-sound

我正在使用 MediaPlayer 来播放声音效果。 但是,当 DnD(请勿打扰)打开时,它仍然会播放声音。

这是我的代码:

public static void playSound(Context context, @RawRes int soundId)
{
    MediaPlayer mp = MediaPlayer.create(context, soundId);
    mp.start();
    mp.setOnCompletionListener(mediaPlayer -> {
        mp.release();
    });
}

我尝试像这样设置音频流类型,但我的声音根本无法播放:

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

如何初始化媒体播放器,以便我的声音执行以下操作:

  • DnD 关闭:播放
  • DnD 完全安静:不要玩
  • 仅限 DnD 闹钟:请勿播放
  • 仅限 DnD 优先:不玩

目前,只有当 DnD 处于完全静音模式时,声音才会静音。

我现在唯一能想到的就是检索 DnD 设置并仅在关闭时播放声音。但这对我来说似乎更像是一种解决方法。

最佳答案

您可以先像这样获取请勿打扰模式的状态

 try {
        Settings.Global.getInt(getContentResolver(), "zen_mode"); // this return an int
    } catch (Settings.SettingNotFoundException e) {
        e.printStackTrace();
    }

该语句返回一个 int 值,您可以像这样使用它

  • 0 - 如果 DnD 关闭。
  • 1 - 如果 DnD 已开启 - 仅优先
  • 2 - 如果 DnD 开启 - 完全静音
  • 3 - 如果 DnD 开启 - 仅闹钟

现在您所要做的就是一个简单的 if 语句,然后您就可以相应地播放或停止音频。

您可以像这样停止MediaPlayer

mp.stop();

关于Android 开启勿扰模式时不播放音效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652127/

相关文章:

android - 尝试访问继承字段时出现 NullPointerException

java - Start called in state 4 error in android MediaPlayer?

Android 检测到不成功的电话并稍后再试

安卓开发工具包。音频管理器。 setStreamVolume 最大 int 值

android - 如何用数字列出 ListView

android - 暂停 Kotlin 协程,直到流具有特定值

android - Android 应用程序开发中的充气器

android - 媒体 Controller 隐藏但媒体播放器继续播放

Android:在服务器上播放 mp3 文件时出现异常。

Android AudioManager.setMode(MODE_NORMAL) 失败