java.lang.SecurityException: Not allowed to change Do Not Disturb state - 免打扰模式异常
今天在使用 AudioManager
调节系统音量大小和切换静音的时候抛出了异常:
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)
查了一下发现是在 Android 6.0(API 23)之后,如果应用需要在免打扰模式下切换音量大小或者通知策略,首先需要在清单文件 AndroidManifest.xml
注册相应的权限:
<!-- 在这里注册不是为了在代码中申请该权限,而是能在跳转到的免打扰权限清单中看到该应用 -->
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
然后在需要改变音量大小或通知策略的代码中进行判断:
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !notificationManager.isNotificationPolicyAccessGranted) {startActivity(Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS))
}
这时候会跳转到免打扰权限的清单界面,开启权限之后就可以在免打扰模式下进行音量修改等相关操作了,这个开启权限的操作也是跟其他权限申请的方式有所不同。
此外,从 NotificationManager
的源码中可以看到,我们还可以通过广播的方式来监听应用对于该权限申请的变化:
/*** Intent that is broadcast when the state of {@link #isNotificationPolicyAccessGranted()}* changes.** This broadcast is only sent to registered receivers, and only to the apps that have changed.*/
@SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED= "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
参考:In Android 7 (API level 24) my app is not allowed to mute phone (set ringer mode to silent)
java.lang.SecurityException: Not allowed to change Do Not Disturb state - 免打扰模式异常相关推荐
- Java.lang.SecurityException
本人遇到的问题是第二个.在eclipse中清除tomcat相关,重新设置java版本,检查jdk的security文件加下的两个jar,然后重启eclipse,重新配置tomcat,再次启动.ok,错 ...
- java.lang.SecurityException Permission Denial opening provider ngyb.createdatabase.AccountProvider
java.lang.SecurityException: Permission Denial: opening provider ngyb.createdatabase.AccountProvider ...
- Java java.lang.SecurityException: Prohibited package name
java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" ...
- JAVA Junit error java.lang.SecurityException: class junit.framework.JUnit4TestCaseFacade
运行junit4时报错: java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s s ...
- 使用Dwr时出现java.lang.SecurityException: Access to debug pages is denied
问题描述:项目中使用了Dwr技术时,出现了java.lang.SecurityException: Access to debug pages is denied描述错误提示 解决方法: 在配置文件w ...
- 使用sqljdbc连接mssql数据库,maven生成jar运行后报Exception in thread main java.lang.SecurityException错误...
错误信息如下: Exception in thread "main" java.lang.SecurityException: Invalid signature file dig ...
- Appium报错:java.lang.SecurityException: uid 2000 does not have android.permission.WRITE_SECURE_SETTING
Appium报错:java.lang.SecurityException: uid 2000 does not have android.permission.WRITE_SECURE_SETTING ...
- java.lang.SecurityException: getDeviceId: The user 10158 does not meet the requirements to access de
问题 执行获取Android设备的deviceId,获取设备的标识号 TelephonyManager manager = (TelephonyManager)context.getSystemSer ...
- 用java下载apk解析包出错_Android 9.0 安装包解析错误 java.lang.SecurityException: Permission Denial解决方案...
在android 9.0自动下载更新时 遇到 安装包解析错误 错误示例.png 在android 7.0使用的是同一套框架却没有问题? 然后通过adb命令抓取一下异常发现 12-18 19:21:32 ...
最新文章
- synchronized能不能保证有序性??
- openstack rootwrap详解
- 正则表达式 运算 常见
- 【Linux系统编程】Linux 线程浅析
- 【读书笔记】《编写高效的JavaScript程序》
- springboot整合redis,推荐整合和使用案例(2021版)
- 51Nod-1383 整数分解为2的幂【数列】
- 20172303 2017-2018-2 《程序设计与数据结构》实验五报告
- 用iSSH代替Mobile Terminal管理iOS
- 基于STM32通过RTC唤醒低功耗模式
- 微信小程序文件下载并保存
- whose size is larger than the fetch size
- 机器学习——PCA(主成分分析)与人脸识别
- MSP430F149利用JTAG以及BSL下载配置图解!
- 微信“小程序”来了,短期不可高估,长期不可低估
- Vue3前端项目加载使用腾讯地图
- 位图(BMP)文件格式(一)
- 360安全浏览器极速模式对rem失效
- Codeforces633C Spy Syndrome 2 (单词Trie)
- Arduino成长日记6 - 中断机制
热门文章
- Win10物联网IoT版更新10586.63:提升核心安全SSH稳定性
- mysql连接hostname_使用hostname方式连接数据库!
- influxDB 查看表结构
- rsyslog日志服务器的日志文件路径,使用rsyslog收集日志
- 关于恢复万象OL的C盘系统后,重装万象OL后MSDE服务不能启动的解决
- effective emacs中文版
- mac 备忘录误操作删除了文件,找不到最近删除的文件
- html页面遍历数组,JavaScript中利用for循环遍历数组
- 45岁程序员精通各种技术体系,竟然连个面试机会都没有?
- 如何使用Gulp执行任务?