我有一个应用程序,它通过使用 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/