今天在使用 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 - 免打扰模式异常相关推荐

  1. Java.lang.SecurityException

    本人遇到的问题是第二个.在eclipse中清除tomcat相关,重新设置java版本,检查jdk的security文件加下的两个jar,然后重启eclipse,重新配置tomcat,再次启动.ok,错 ...

  2. java.lang.SecurityException Permission Denial opening provider ngyb.createdatabase.AccountProvider

    java.lang.SecurityException: Permission Denial: opening provider ngyb.createdatabase.AccountProvider ...

  3. Java java.lang.SecurityException: Prohibited package name

    java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" ...

  4. JAVA Junit error java.lang.SecurityException: class junit.framework.JUnit4TestCaseFacade

    运行junit4时报错: java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s s ...

  5. 使用Dwr时出现java.lang.SecurityException: Access to debug pages is denied

    问题描述:项目中使用了Dwr技术时,出现了java.lang.SecurityException: Access to debug pages is denied描述错误提示 解决方法: 在配置文件w ...

  6. 使用sqljdbc连接mssql数据库,maven生成jar运行后报Exception in thread main java.lang.SecurityException错误...

    错误信息如下: Exception in thread "main" java.lang.SecurityException: Invalid signature file dig ...

  7. 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 ...

  8. java.lang.SecurityException: getDeviceId: The user 10158 does not meet the requirements to access de

    问题 执行获取Android设备的deviceId,获取设备的标识号 TelephonyManager manager = (TelephonyManager)context.getSystemSer ...

  9. 用java下载apk解析包出错_Android 9.0 安装包解析错误 java.lang.SecurityException: Permission Denial解决方案...

    在android 9.0自动下载更新时 遇到 安装包解析错误 错误示例.png 在android 7.0使用的是同一套框架却没有问题? 然后通过adb命令抓取一下异常发现 12-18 19:21:32 ...

最新文章

  1. synchronized能不能保证有序性??
  2. openstack rootwrap详解
  3. 正则表达式 运算 常见
  4. 【Linux系统编程】Linux 线程浅析
  5. 【读书笔记】《编写高效的JavaScript程序》
  6. springboot整合redis,推荐整合和使用案例(2021版)
  7. 51Nod-1383 整数分解为2的幂【数列】
  8. 20172303 2017-2018-2 《程序设计与数据结构》实验五报告
  9. 用iSSH代替Mobile Terminal管理iOS
  10. 基于STM32通过RTC唤醒低功耗模式
  11. 微信小程序文件下载并保存
  12. whose size is larger than the fetch size
  13. 机器学习——PCA(主成分分析)与人脸识别
  14. MSP430F149利用JTAG以及BSL下载配置图解!
  15. 微信“小程序”来了,短期不可高估,长期不可低估
  16. Vue3前端项目加载使用腾讯地图
  17. 位图(BMP)文件格式(一)
  18. 360安全浏览器极速模式对rem失效
  19. Codeforces633C Spy Syndrome 2 (单词Trie)
  20. Arduino成长日记6 - 中断机制

热门文章

  1. Win10物联网IoT版更新10586.63:提升核心安全SSH稳定性
  2. mysql连接hostname_使用hostname方式连接数据库!
  3. influxDB 查看表结构
  4. rsyslog日志服务器的日志文件路径,使用rsyslog收集日志
  5. 关于恢复万象OL的C盘系统后,重装万象OL后MSDE服务不能启动的解决
  6. effective emacs中文版
  7. mac 备忘录误操作删除了文件,找不到最近删除的文件
  8. html页面遍历数组,JavaScript中利用for循环遍历数组
  9. 45岁程序员精通各种技术体系,竟然连个面试机会都没有?
  10. 如何使用Gulp执行任务?