前言

最近使用客户的launcher设置音量时,会弹出一个界面,用于授权,用于给【勿扰模式】进行授权。

授权界面的源码

通过adb shell 指令获取当前的包名和界面,发现显示如下:

com.android.Settings.Settings$ZenAccessSettingsActivity

明显界面已经跳转到了原生setting app,一番搜索,该界面的实现源码如下:

packages/apps/Settings/src/com/android/settings/notification/ZenAccessSettings.java

在这里,主要通过如下方法获取所有需要勿扰权限的app:

private void reloadList() {final PreferenceScreen screen = getPreferenceScreen();screen.removeAll();final ArrayList<ApplicationInfo> apps = new ArrayList<>();final ArraySet<String> requesting = getPackagesRequestingNotificationPolicyAccess();if (!requesting.isEmpty()) {final List<ApplicationInfo> installed = mPkgMan.getInstalledApplications(0);if (installed != null) {for (ApplicationInfo app : installed) {if (requesting.contains(app.packageName)) {apps.add(app);}}}}ArraySet<String> autoApproved = new ArraySet<>();autoApproved.addAll(mNoMan.getEnabledNotificationListenerPackages());requesting.addAll(autoApproved);Collections.sort(apps, new PackageItemInfo.DisplayNameComparator(mPkgMan));for (ApplicationInfo app : apps) {final String pkg = app.packageName;final CharSequence label = app.loadLabel(mPkgMan);final SwitchPreference pref = new AppSwitchPreference(getPrefContext());pref.setKey(pkg);pref.setPersistent(false);pref.setIcon(app.loadIcon(mPkgMan));pref.setTitle(label);pref.setChecked(hasAccess(pkg));if (autoApproved.contains(pkg)) {pref.setEnabled(false);pref.setSummary(getString(R.string.zen_access_disabled_package_warning));}pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {final boolean access = (Boolean) newValue;if (access) {new ScaryWarningDialogFragment().setPkgInfo(pkg, label).show(getFragmentManager(), "dialog");} else {new FriendlyWarningDialogFragment().setPkgInfo(pkg, label).show(getFragmentManager(), "dialog");}return false;}});screen.addPreference(pref);}
}

这里可以获取到所有需要授权的app,接着需要用户去点击开关进行授权,这里授权的主要方法如下:

private static void setAccess(final Context context, final String pkg, final boolean access) {logSpecialPermissionChange(access, pkg, context);AsyncTask.execute(new Runnable() {@Overridepublic void run() {final NotificationManager mgr = context.getSystemService(NotificationManager.class);mgr.setNotificationPolicyAccessGranted(pkg, access);}});
}

该方法的关键实现是如下函数:

mgr.setNotificationPolicyAccessGranted(pkg, access);

通过搜索发现,mgr定义如下“

final NotificationManager mgr = context.getSystemService(NotificationManager.class);

这么看来,想要不弹出授权界面,在系统起来的时候,给该应用进行授权即可。这次选择在自己开发的系统服务中进行授权;

final NotificationManager mgr = context.getSystemService(NotificationManager.class);
mgr.setNotificationPolicyAccessGranted(pkg, access);

到此可解决该问题。

需要注意的是,应用需要先在AndroidManifest.xml中申请如下权限:

android.permission.ACCESS_NOTIFICATION_POLICY

Android9.0勿扰模式【Do Not Disturb】相关推荐

  1. android9勿扰模式,努比亚Z9 mini勿扰模式怎么使用?努比亚Z9mini勿扰模式开启教程...

    努比亚Z9 mini勿扰模式怎么设置呢?勿扰模式开启后可以防止他人通过电话或短信来打扰自己的休息时间或工作时间,目前大多数安卓智能手机都有这个功能.那么如何开启努比亚Z9mini勿扰模式呢?下面脚本之 ...

  2. Android Zenmode/DND(勿扰模式) 实现原理剖析

    引言 Android手机越来越多的向着用户体验提升方面靠近,那么Zenmode就会变得越来越重要. 近年来,也有很多的新功能依赖于ZenMode去实现,也有很多专利在这个方面申请成功. 举两个简单的例 ...

  3. android Lollipop勿扰模式

    android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...

  4. android 勿扰模式代码,android Lollipop勿扰模式

    android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...

  5. 勿扰模式代码结构简析

    勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...

  6. android 勿扰模式代码,勿扰模式代码结构简析

    勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...

  7. android 勿扰模式代码,android 勿扰模式代码结构简析

    勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...

  8. Android系统设置之勿扰模式

    项目场景: 智能车载机 问题描述: 车载机使用4G流量,但客户接入的是带通话功能的sim卡,客户测试过程中遇到有人拨号,来电音量不是静音情况下,居然通了.客户提出禁止来电功能. 原因分析: 尽管系统进 ...

  9. RingerMode 设置和勿扰模式关系

    问题引入,在项目中,Android6.0项目中,客户要求去掉勿扰模式,当时我们只是去掉了勿扰模式的界面显示部分,即在SystemUI 的VolumeDialog.java类当中去掉了勿扰模式显示的部分 ...

最新文章

  1. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.10. 位串类型
  2. MySQL分页查询小技巧
  3. DW里面html鼠标点击特效,dw制作鼠标经过时图像放大鼠标离开图像回原形效果
  4. (王道408考研操作系统)第三章内存管理-第一节5:动态分区分配算法(首次适应、和邻近适应)
  5. 纠结也好,蛋疼也罢,既然创业了,就把路走好。
  6. 手动写一个上传图片的组件,不适用插件,包括限制图片大小,格式
  7. linux下 iptables 的配置
  8. 奥斯汀页眉怎么设置_wps怎么只删除本页的页眉_Word页眉的设置和删除,这些问题你有遇到过吗?...
  9. java微博模拟登陆_java+selenium模拟登陆新浪微博demo
  10. 这7个素材网站送你参考,一部手机就可以做影视剪辑,0基础抖音涨粉
  11. 公司找域名怎么找?有什么技巧?
  12. 07——Vue 中的事件处理 以及 事件修饰符 、键盘事件
  13. android水波进度条,Android--水波纹进度条
  14. 《深度学习--基于python的理论与实现》学习笔记6:第三章神经网络(2)
  15. [轉]ERP系统之比较——SAP、Oracle、BAAN、JDE、SSA
  16. python生成一个四位数字的随机数
  17. 恭贺新春-杨建荣敬祝
  18. PDF如何插入空白页面,来教你试试这种方法
  19. JavaFX --- 标签、文本框、密码框、下拉框、按钮、单选按钮、复选框
  20. SOC——Boundary scan 模块(一)

热门文章

  1. 基于SSM的甜品店系统(含毕业论文)
  2. Windows宽带断线重连(C#)
  3. 步步提高网站体验系列之——骨架屏
  4. VScode中使用plantuml画流程图
  5. HardFault 产生原因
  6. idea快速找到jar包位置
  7. 算法 二叉树 AVL树
  8. heic是什么格式?怎么转换成jpg或png?
  9. 因果推断dowhy之-401(k)资格对净金融资产的影响
  10. keil5c51找不到51芯片