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

前端之家收集整理的这篇文章主要介绍了在Android 7(API 24级)中,我的应用不允许静音手机(将铃声模式设置为静音)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用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所说).

首先检查你是否有这个权限.如果没有,请打开应用程序的免打扰访问设置:

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
    && !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);
}
原文链接:https://www.f2er.com/android/312176.html

猜你在找的Android相关文章