android - 在 Android 7(API 级别 24)中,我的应用不允许将手机静音(将铃声模式设置为静音)

标签 android android-audiomanager android-7.0-nougat

我有一个应用程序,它通过使用 AudioManager 并使用以下代码将振铃模式设置为静音来使手机静音:

AudioManager audioManager = 
    (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
try {
    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)
} catch (Exception e) {
    e.printStackTrace();
}

这适用于 Android 6,但现在使用 Android 7,我收到以下错误:

System.err: java.lang.SecurityException: Not allowed to change Do Not Disturb state
System.err: at android.os.Parcel.readException(Parcel.java:1683)
System.err: at android.os.Parcel.readException(Parcel.java:1636)
System.err: at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:962)
System.err: at android.media.AudioManager.setRingerMode(AudioManager.java:1022)
System.err: at controllers.SearchResultController.mutePhone(SearchResultController.java:185)

我需要申请什么新权限才能完成这项工作吗?

我查看了 Android 权限列表,但找不到任何相关的内容。

最佳答案

感谢您的回答,这里有一些更详细的信息。

为了能够将振铃模式设置为静音,您必须请求访问通知策略的权限(就像@ucsunil 所说的那样)。

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

然后,检查您是否有此权限。如果您不这样做,请为您的应用打开“请勿打扰”设置:

NotificationManager notificationManager = 
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    && !notificationManager.isNotificationPolicyAccessGranted()) {

    Intent intent = new Intent(
                        android.provider.Settings
                        .ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);

    startActivity(intent);
}

当您运行 startActivity() 时,Android 会为您的应用打开“请勿打扰”访问设置。

让我感到困惑的是,请求此权限的方式与其他权限完全不同。

仅供引用,这里是请求权限的方式READ_CONTACTS:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    && ActivityCompat.checkSelfPermission(activity,
        Manifest.permission.READ_CONTACTS)
        == PackageManager.PERMISSION_DENIED) {

    ActivityCompat.requestPermissions(activity,
        new String[]{ Manifest.permission.READ_CONTACTS },
            REQUEST_CODE_READ_CONTACTS);
}

关于android - 在 Android 7(API 级别 24)中,我的应用不允许将手机静音(将铃声模式设置为静音),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39151453/

相关文章:

java - 在空对象引用上接收 'android.content.Context android.content.Context.getApplicationContext()'

安卓 Java : how to disable microphone input while streaming system audio?

java - Android Audiomanager 中调节音量不准确

java - 我可以在以前版本的 Android 操作系统上使用 Android N 平台开发的应用程序吗

Android:使用 FileProvider 的外部存储文件的 URI

android - 我们在 Android N 网络安全配置中使用什么来获得自签名证书?

android - Greenrobot 的 Eventbus : Two Fragments calling async tasks jobs got Eventbus confused

android - 为什么我来自 url 的图像没有出现在 TouchableOpacity 中

android - 在android中缩放具有图像和文本(Html内容)的textview

Android 小部件通过服务更新,即执行 http 请求