Android系统设置之勿扰模式
项目场景:
智能车载机
问题描述:
车载机使用4G流量,但客户接入的是带通话功能的sim卡,客户测试过程中遇到有人拨号,来电音量不是静音情况下,居然通了。客户提出禁止来电功能。
原因分析:
尽管系统进行了裁剪,去掉了拨号和来电APP,但是来电等功能还是可以使用的,最后无人接通,系统通知栏出现了来电未接图标。
解决方案:
方案1,求助
系统开发人员在系统层修改代码,禁止来电及拨号功能,当然是行的通的,但是被告知不能及时修改,那么进行OTA升级可能要过段时间,可是应用马上到了发布日,就先自己想想办法了。当然如果你的小伙伴很给力,那么直接进行OTA升级就可以解决,应用层无需更改。
方案2,实现来电自动拒接
监听来电通知,在有电话进来的时候,拒接,注意:权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
实现方法(注意我这边因为有系统编译的SDK包,所以可以直接调用,没有的话,可通过反射实现)
反射实现参考点击我
private void endCall(){AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);TelephonyManager tm = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);tm.listen(new PhoneStateListener(){@Overridepublic void onCallStateChanged(int state, String phoneNumber) {super.onCallStateChanged(state, phoneNumber);Log.e("onCallStateChanged","state = "+state +" phoneNumber = "+phoneNumber);if(state==TelephonyManager.CALL_STATE_RINGING){am.setRingerMode(AudioManager.RINGER_MODE_SILENT);//设置为静音模式,解决延迟导致的响铃问题tm.endCall();am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢复普通模式,恢复声音}}},PhoneStateListener.LISTEN_CALL_STATE);}
方案3,设置勿扰模式
通过设置勿扰模式策略,设置在一些场景下,忽略来电,短信,通知,闹铃等,此处参考android 7.0的源码,路径com.android.settings.notification.ZenModePrioritySettings。
还是那个前提,因为是定制系统,我有系统SDK的jar包,并且是系统签名的app,所以直接调用。
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
public class ZenModePriorityUtils {public static void zenMode_switch(Context context,int categoryType,boolean allowed){NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);nm.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY);NotificationManager.Policy policy = nm.getNotificationPolicy();int priorityCategories = getNewPriorityCategories(policy,allowed,categoryType);NotificationManager.Policy newPolicy = new NotificationManager.Policy(priorityCategories, policy.priorityCallSenders, policy.priorityMessageSenders,policy.suppressedVisualEffects);NotificationManager.from(context).setNotificationPolicy(newPolicy);}private static boolean isPriorityCategoryEnabled(NotificationManager.Policy mPolicy,int categoryType) {return (mPolicy.priorityCategories & categoryType) != 0;}private static int getNewPriorityCategories(NotificationManager.Policy mPolicy,boolean allow, int categoryType) {int priorityCategories = mPolicy.priorityCategories;if (allow) {priorityCategories |= categoryType;} else {priorityCategories &= ~categoryType;}return priorityCategories;}
//设置勿扰模式---重复来电者ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS,false);//设置勿扰模式---来电ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_CALLS,false);//设置勿扰模式---媒体(设备有广告,媒体音量不加入勿扰模式)ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA,true);//设置勿扰模式---讯息ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES,false);//设置勿扰模式---闹铃ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS,false);//设置勿扰模式---提醒ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS,false);//设置勿扰模式---活动ZenModePriorityUtils.zenMode_switch(this,NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS,false);
总结:
最终采用方案3,但需要注意的,由于7.0到9.0这部分代码,android进行了较大改动,部分设置需要在9.0上才能有效果。
感谢这几位:
https://www.jianshu.com/p/ab88284384e9
https://blog.csdn.net/ty_phone8/article/details/78193055
https://www.jianshu.com/p/a5662fad84b5
https://blog.csdn.net/u010381752/article/details/48113083
https://blog.csdn.net/guduxiake1106/article/details/51065633?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
Android系统设置之勿扰模式相关推荐
- Android Zenmode/DND(勿扰模式) 实现原理剖析
引言 Android手机越来越多的向着用户体验提升方面靠近,那么Zenmode就会变得越来越重要. 近年来,也有很多的新功能依赖于ZenMode去实现,也有很多专利在这个方面申请成功. 举两个简单的例 ...
- android 勿扰模式代码,android Lollipop勿扰模式
android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...
- android Lollipop勿扰模式
android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...
- android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程
Android N去除了情景模式,取而代之的是勿扰模式.勿扰模式的入口有两处,下拉栏和设置声音里面.下面我们就从设置声音入口,看看勿扰模式的设置流程. 首先,勿扰模式的首页有三种选项,分别是仅允许优先 ...
- android 勿扰模式代码,勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...
- android 勿扰模式代码,android 勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...
- android 勿扰模式代码结构简析
勿扰模式代码结构简析 标签: 勿扰模式 2017-08-08 11:05 60人阅读 评论(0) 收藏 举报 分类: android(59) 版权声明:本文为博主原创文章,未经博主允许不 ...
- 勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...
- GNOME 3.36正式发布,家长控制、勿扰模式、更加优雅的锁屏界面
2020年3月11日,GNOME 3.36正式发布,被命名为 "Gresik", 是 GNOME 3 当前的最新版本.它包含了主要的新功能,以及许多小的改进和错误修复.总的来说,这 ...
最新文章
- 在3D世界中创建不同的相机模式——检查对象是否可见
- linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!...
- 图解GitHub和SourceTree入门教程
- 如何进行.NET高效开发
- [导入]Ajax初试
- vue新增属性是否会响应式更新?
- (篇九)C语言统计某个字母的个数、统计各种字符的个数、统计单词的个数
- 堪称神器的命令行工具系列——curl
- ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
- ITIL4 讲解: 知识管理
- pk8/x509.pem转换为keystore
- 019年中国航空三字代码对照表完全汇总
- nero刻录错误 序列号问题
- 开源硬件的知识产权管理
- unity reflect_Unity Reflect在这里
- SD-WAN,一场广域网的革命
- 用python计算邮费考虑是否加急,用python计算residuals
- uni - app的 nfc功能使用鱼住未来第三方插件完成
- 华东之旅--西塘第二天
- 内部类有哪些好处?什么时候使用内部类