Android 来电白名单 只允许联系人呼入电话
客户需求只允许通讯录中联系人可以呼入电话。参考自带的黑名单实现
- CallsManager.java类中的onSuccessfulIncomingCall方法有一些过滤器,可以仿照黑名单的方式添加自己的过滤器。
packages/services/Telecomm/src/com/android/server/telecom/CallsManager.java
+import com.android.server.telecom.callfiltering.AsyncContactCheckFilter;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;
@@ -505,6 +507,7 @@ public class CallsManager extends Call.ListenerBasefilters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter()));filters.add(new CallScreeningServiceFilter(mContext, this, mPhoneAccountRegistrar,mDefaultDialerCache, new ParcelableCallUtils.Converter(), mLock));
+ filters.add(new AsyncContactCheckFilter(mContext));//mh@[非联系人挂断]new IncomingCallFilter(mContext, this, incomingCall, mLock,mTimeoutsAdapter, filters).performFiltering();}
- 实现过滤器
packages/services/Telecomm/src/com/android/server/telecom/callfiltering/AsyncContactCheckFilter.java
/** Copyright (C) 2016 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License*/package com.android.server.telecom.callfiltering;import android.content.Context;
import android.os.AsyncTask;
import android.telecom.Log;import com.android.server.telecom.Call;
import com.android.server.telecom.LogUtils;
import android.net.Uri;
import android.database.Cursor;/*** An {@link AsyncTask} that checks if a call needs to be blocked.* <p> An {@link AsyncTask} is used to perform the block check to avoid blocking the main thread.* The block check itself is performed in the {@link AsyncTask#doInBackground(Object[])}.*/
public class AsyncContactCheckFilter extends AsyncTask<String, Void, Boolean>implements IncomingCallFilter.CallFilter {private final Context mContext;private Call mIncomingCall;private CallFilterResultCallback mCallback;public AsyncContactCheckFilter(Context context) {mContext = context;}@Overridepublic void startFilterLookup(Call call, CallFilterResultCallback callback) {mCallback = callback;mIncomingCall = call;String number = call.getHandle() == null ?null : call.getHandle().getSchemeSpecificPart();this.execute(number);}@Overrideprotected void onPreExecute() {}@Overrideprotected Boolean doInBackground(String... params) {try {return isContact(mContext, params[0]);} finally {}}@Overrideprotected void onPostExecute(Boolean isContact) {try {CallFilteringResult result;if (!isContact) {//非联系人直接挂断result = new CallFilteringResult(false, // shouldAllowCalltrue, //shouldRejectfalse, //shouldAddToCallLogfalse // shouldShowNotification);} else {result = new CallFilteringResult(true, // shouldAllowCallfalse, // shouldRejecttrue, // shouldAddToCallLogtrue // shouldShowNotification);}mCallback.onCallFilteringComplete(mIncomingCall, result);} finally {}}//联系人查询private boolean isContact(Context context, String phoneNum) {Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNum);Cursor cursor = context.getContentResolver().query(uri, new String[] {android.provider.ContactsContract.Data.DISPLAY_NAME}, null, null, null);boolean exists = false;if (cursor != null) {try {if(cursor.moveToFirst()){exists = true;String name = cursor.getString(0);Log.i("mh.log", "incoming phone is contact:" + name);}} catch (Exception e) {e.printStackTrace();} finally {cursor.close();}}return exists;}
}
- 可以添加一个开关,这里使用Settings的方式,也可以用广播。
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+ <!--mh@ phone blocker -->
+ <bool name="xc_unknow_incall_switch">false</bool>
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2355,6 +2355,10 @@ class DatabaseHelper extends SQLiteOpenHelper {R.bool.def_screen_brightness_automatic_mode);loadDefaultAnimationSettings(stmt);
+
+ //mh@{
+ loadBooleanSetting(stmt, "xc_unknow_incall_blocker",
+ R.bool.xc_unknow_incall_switch);
+ //mh@}
再修改一下CallsManager.java
public void onSuccessfulIncomingCall(Call incomingCall) {Log.d(this, "onSuccessfulIncomingCall");if (incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE)) {Log.i(this, "Skipping call filtering due to ECBM");onCallFilteringComplete(incomingCall, new CallFilteringResult(true, false, true, true));return;}List<IncomingCallFilter.CallFilter> filters = new ArrayList<>();filters.add(new DirectToVoicemailCallFilter(mCallerInfoLookupHelper));filters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter()));filters.add(new CallScreeningServiceFilter(mContext, this, mPhoneAccountRegistrar,mDefaultDialerCache, new ParcelableCallUtils.Converter(), mLock));//mh@{boolean blocker = Settings.System.getInt(mContext.getContentResolver(), "xc_unknow_incall_blocker", 0) == 1;if(blocker) {filters.add(new AsyncContactCheckFilter(mContext));//mh@[非联系人挂断]}//mh@}new IncomingCallFilter(mContext, this, incomingCall, mLock,mTimeoutsAdapter, filters).performFiltering();}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Android 来电白名单 只允许联系人呼入电话
客户需求只允许通讯录中联系人可以呼入电话。参考自带的黑名单实现 CallsManager.java类中的onSuccessfulIncomingCall方法有一些过滤器,可以仿照黑名单的方式添加自己的过滤器。 packages/services/Telecomm/src/com/android/server/telecom/CallsManager.java …...
![](https://i-blog.csdnimg.cn/blog_migrate/c6909aecbcc13d601e65c093ad0ee5d7.gif)
【计算机网络】lab3 802.11 (无线网络帧)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...
![](https://i-blog.csdnimg.cn/direct/445d92691c6d4db5bcb84fd0f356cbfc.png)
单片机(MCU)-简单认识
简介: 内部集成了CPU,RAM,ROM,定时器,中断系统,通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集(依靠传感器),处理(依靠CPU)&…...
![](https://i-blog.csdnimg.cn/direct/2f6e80576dd24347a31b4edc18500638.png)
全面教程:Nacos 2.3.2 启用鉴权与 MySQL 数据存储配置
全面教程:Nacos 2.3.2 启用鉴权与 MySQL 数据存储配置 1. 配置 Nacos 开启鉴权功能 1.1 修改 application.properties 配置文件 在 Nacos 2.3.2 中,开启鉴权功能需要修改 conf/application.properties 文件。按照以下方式配置: # 开启鉴权…...
![](https://i-blog.csdnimg.cn/img_convert/15c3261df22d346fd2c25840c29695e3.webp?x-oss-process=image/format,png)
软件23种设计模式完整版[附Java版示例代码]
一、什么是设计模式 设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。 设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们…...
![](https://i-blog.csdnimg.cn/img_convert/40d449e31c49ec5d2d6c5a53f9896d53.png)
国标GB28181-2022视频平台EasyGBS小知识:局域网ip地址不够用怎么解决?
在局域网中,IP地址不足的问题通常不会在小型网络中出现,但在拥有超过255台设备的大型局域网中,就需要考虑如何解决IP地址不够用的问题了。 在企业局域网中,经常会出现私有IP地址如192.168.1.x到192.168.1.255不够用的情况。由于0…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP 循环控制结构深度剖析:从基础到实战应用
PHP 循环控制结构深度剖析:从基础到实战应用 PHP提供了多种控制结构,其中循环控制结构是最常见的结构之一。它们使得我们能够高效地重复执行一段代码,直到满足某个条件为止。本文将从PHP循环的基础知识出发,逐步分析其在实际项目…...
![](https://i-blog.csdnimg.cn/direct/32e7e880ecec469fbf4441f0672bef23.png)
vue的属性绑定
重建一个新的项目 App.vue main.js HelloWorld.vue 属性绑定 双大括号不能在 HTML attributes 中使用。想要响应式地绑定一个 attribute,应该使用 v-bind 指令 <template><div v-bind:id"dynamicId" v-bind:class"dynamicClass">…...
![](https://i-blog.csdnimg.cn/direct/3f42b570e68c4e2db4493b08d5063c1d.png#pic_center)
FFmpeg音视频流媒体,视频编解码性能优化
你是不是也有过这样一个疑问:视频如何从一个简单的文件变成你手机上快速播放的短片,或者是那种占满大屏幕的超高清大片?它背后的法宝,离不开一个神奇的工具——FFmpeg!说它强大,完全不为过,它在…...
![](https://www.ngui.cc/images/no-images.jpg)
16_Redis Lua脚本
Redis Lua脚本是Redis提供的一种强大的扩展机制。 1.Redis Lua脚本介绍 1.1 基本概念 Redis Lua脚本允许开发者将一段Lua语言编写的代码发送给Redis服务器执行。这项功能自Redis 2.6版本引入以来,为用户提供了强大的灵活性和扩展能力,使得可以在Redis内部直接处理复杂的业…...
![](https://i-blog.csdnimg.cn/direct/e34adf8c330541118fae395edec67d83.png)
Redis为 List/Set/Hash 的元素设置单独的过期时间
一.业务简介 我们知道,Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间,只能给整个列表、集合或者 Hash 设置过期时间。 这样,当 List/Set/Hash 过期时,里面的所有 field 元素就全部过期了。但这样并不…...
![](https://www.ngui.cc/images/no-images.jpg)
鸿蒙中调整应用内文字大小
1、ui Stack() {Row() {ForEach([1, 2, 3, 4], (item: number) > {Text().width(3).height(20).backgroundColor(Color.Black).margin(item 2 ? { left: 8 } : item 3 ? { left: 7 } : { left: 0 })})}.width(97%).justifyContent(FlexAlign.SpaceBetween).padding({ ri…...
![](https://www.ngui.cc/images/no-images.jpg)
计算机网络之---防火墙与入侵检测系统(IDS)
防火墙与入侵检测系统(IDS) 防火墙(Firewall) 和 入侵检测系统(IDS, Intrusion Detection System) 都是网络安全的关键组件,但它们的作用、功能和工作方式有所不同。 防火墙 防火墙是网络安全的一种设备或软件&#…...
![](https://i-blog.csdnimg.cn/direct/2d302af3de3f44dcb3c3482c3273e779.png)
KG-CoT:基于知识图谱的大语言模型问答的思维链提示
一些符号定义 知识图谱实体数量: n n n 知识图谱中关系类型数量: m m m 三元组矩阵: M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm, M i j k 1 M_{ij}^k 1 Mijk1则说明实体 i i i和实…...
![](https://www.ngui.cc/images/no-images.jpg)
【JMeter】多接口关联
1. 同一线程组内,如何实现多接口关联 非加密的值 前置接口的返回单条数据使用Json提取器提取前置接口的返回多条数据使用Json提取器+逻辑控制器Loop Controller前置接口的返回多条数据使用Json提取器+逻辑控制器forEach加密的值 前置接口的返回值使用Beanshell后置提取器存储为…...
![](https://www.ngui.cc/images/no-images.jpg)
2020 年 12 月青少年软编等考 C 语言五级真题解析
目录 T1. 漫漫回国路思路分析T2. 装箱问题思路分析T3. 鸣人和佐助思路分析T4. 分成互质组思路分析T1. 漫漫回国路 2020 年 5 月,国际航班一票难求。一位在美国华盛顿的中国留学生,因为一些原因必须在本周内回到北京。现在已知各个机场之间的航班情况,求问他回不回得来(不考…...
![](https://www.ngui.cc/images/no-images.jpg)
前端实时显示当前在线人数的实现
实时显示当前在线人数的实现 本文档提供了在网页上实时显示当前在线人数的多种实现方法,包括使用 WebSocket 实现实时更新和轮询方式实现非实时更新。 方法一:使用 WebSocket 实现实时更新 服务器端设置 通过 Node.js 和 WebSocket 库(如 …...
![](https://i-blog.csdnimg.cn/direct/aa90735fb08942909e82d821074aa0b3.png)
Linux第一个系统程序---进度条
进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念,我们用一张图来简单的理解一下: 在计算机语言当中: 换行符:\n 回车符:\r \r\n:回车换行 这时候有人可能会有疑问:我在学习C…...
![](https://i-blog.csdnimg.cn/direct/368f68deb2674a069d2e89a429cf86e1.png)
vscode 无法使用npm, cmd命令行窗口可以正常执行
解决方法: 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源(淘宝): npm config set registry https://regist…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode 967 Numbers With Same Consecutive Differences
题意 给定n,代表整数的长度,给定k代表两个相邻数字之间的间隔。求所有的值构成的组合 题目链接 https://leetcode.com/problems/numbers-with-same-consecutive-differences/description/ 题解 dfs,有k位置要选,第一个位置我…...
![](https://www.ngui.cc/images/no-images.jpg)
node.js中实现token的生成与验证
Token(令牌)是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中,Token常用于身份验证和授权,确保用户能够安全地访问受保护的资源。 作用与意义 身份验证:Token可以用来验证用户的身份࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
[C++11]_[初级]_[工作线程如何监听主线程条件变量wait_for方法的使用]
场景 在开发多线程程序时,有时候需要启动一个线程来监听外部进程的执行情况,并且在指定时间如果还没运行结束就强制结束外部线程。那么C标准库有这种监听线程并能在超时时提示的方法吗? 说明 在C11的<condition_variable>里就可以用…...
![](https://i-blog.csdnimg.cn/direct/0665e7996b2344df93ec105b8cff2b98.png)
Openstack持久存储-Swift,Cinder,Manila三者之间的区别
总结不易,给个三连吧!!! 补充: 文件共享存储服务Manila 在OpenStack生态系统中,Cinder和Manila分别提供了两种不同类型的存储服务,类似于传统的SAN(存储区域网络)和NAS&…...
深度学习第三弹:python入门与线性表示代码
一、python入门 1.熟悉基础数据结构——整型数据,浮点型数据,列表,字典,字符串;了解列表及字典的切片,插入,删除操作。 list1 [1, 2, 3, 4, 5] for each in list1:print(each) print(list1[1…...
![](https://i-blog.csdnimg.cn/direct/29a0463a1d3f40ce98781a7487b57df3.png)
解决报错记录:TypeError: vars() argument must have __dict__ attribute
解决报错记录:manager_pyplot_show vars(manager_class).get(“pyplot_show“) TypeError: vars() argument must 1.问题引申 在pycharm中调用matplotlib函数批量绘制维度图时,抛出异常: manager_pyplot_show vars(manager_class).get(&…...
![](https://i-blog.csdnimg.cn/direct/7c70be680e144d2da040d421bcd628ef.png)
SpringBoot 原理篇(day14)
配置优先级 SpringBoot 中支持三种格式的配置文件: 配置文件优先级排名(从高到低): properties 配置文件yml 配置文件yaml 配置文件 注意事项 虽然 springboot 支持多种格式配置文件,但是在项目开发时,推荐…...
![](https://i-blog.csdnimg.cn/direct/e5f1bd664bf2481283a278d96dcb1f82.png)
Vscode辅助编码AI神器continue插件
案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...
![](https://i-blog.csdnimg.cn/direct/8aa38156de2149d1ab77d8dec371d9f3.webp)
Type-C单口便携显示器-LDR6021
Type-C单口便携显示器是一种新兴的显示设备,它凭借其便携性、高性能和广泛的应用场景等优势,正在成为市场的新宠。以下是Type-C单口便携显示器的具体运用方式: 一、连接与传输 1. **设备连接**:Type-C单口便携显示器通过Type-C接…...
![](https://www.ngui.cc/images/no-images.jpg)
青少年编程与数学 02-006 前端开发框架VUE 19课题、内置组件
青少年编程与数学 02-006 前端开发框架VUE 19课题、内置组件 一、Transition<Transition> 组件基于 CSS 的过渡效果CSS 过渡 class为过渡效果命名CSS 的 transitionCSS 的 animation自定义过渡 class同时使用 transition 和 animation深层级过渡与显式过渡时长性能考量 J…...
![](https://i-blog.csdnimg.cn/direct/d1ee59a4ef094e10b50e67e2882b43f3.png)
腾讯云AI代码助手编程挑战赛 - 使用 JavaScript 构建一个简易日历
功能简介: 动态年份选择:用户可以通过下拉框选择从 2000 年到 2050 年的任意年份。全年日历生成:根据用户选择的年份,动态生成该年份的所有 12 个月份的日历。直观的 UI 设计:使用 CSS 美化日历外观,使日历…...
![](https://yqfile.alicdn.com/45ffcb48254fbcc71a20eab6ce117055561c3f4b.png)
完成网站的建设工作/软文文案范文
DLTK,即 医学成像的深度学习工具包 ,扩展了 TensorFlow, 使针对生物医学影像的深度学习成为可能。此工具包提供了专用运算与函数、模型实现、教程(如本博客中所用)和典型应用的代码示例。 网站:https://dlt…...
![](/images/no-images.jpg)
网站实现步骤及方法/seo去哪里学
路由交换实验 第一篇:实验:通过console口访问交换机 第二篇:实验:通过Telnet访问路由器转载于:https://www.cnblogs.com/madsnotes/p/7095119.html...
![](https://images2015.cnblogs.com/blog/859549/201704/859549-20170418221518118-37917214.png)
公司网站制作效果怎么样/百度allin 人工智能
本文提要 前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控。 我的github地址点这里 …...
![](/images/no-images.jpg)
怎样创建个人购物网站/b站推广入口2023破解版
由于工作和学习的需要,要在本本上安装SQL SERVER 2005 开发版(本本的操作系统是XP,所以不能安装Enterprise版本,而Express版本的功能又十分有限),去微软的官方网站搜索了一下sql server 2005 developer,找到了一些关于…...
![](/images/no-images.jpg)
幼儿园网站建设管理人员/网络推广是以企业产品或服务
节专家>详细资料节>颜色>背景颜色(勾上) CSS样式,水晶报表语法 if recordnumber mod 20 then crYellow else crWhite 转载于:https://www.cnblogs.com/kingjiong/archive/2009/02/26/1398500.html...
![](http://www.idcps.com/uploadfile/2014/1103/20141103043914959.png)
不让网站在手机怎么做/进入百度app
IDC评述网(idcps.com)11月04日报道:根据百度统计的最新数据显示,10月国内浏览器市场份额情况整体呈现下降趋势,其中IE的份额为47.75%,环比上月,下降了0.70%,降幅最大。而Chrome则扭转…...