当前位置: 移动技术网 > IT编程>移动开发>Android > Android8.1 通过黑名单屏蔽系统短信和来电功能

Android8.1 通过黑名单屏蔽系统短信和来电功能

2019年07月23日  | 移动技术网IT编程  | 我要评论

界首市人民政府网,好笠好套,偶像天堂中文版全集

前言

同样的最近有个新需求,需要将8.1 设备的来电功能和短信功能都屏蔽掉,特殊产品就是特殊定制,那就开始吧。

屏蔽短信功能

还可沿用之前的6.0 处理方法, 在 smsreceiverservice.java handlesmsreceived()中进行拦截分发

但是想了想这次准备搞点不一样的,我发现通讯录和之前6.0不太一样,8.1有个添加屏蔽联系人的功能,能够屏蔽指定电话和短信,也就是黑名单功能。所以此次就通过黑名单的方式进行拦截,通过下面几位老哥的详尽分析和打印日志找到修改地方

源码位置 frameworks\opt\telephony\src\java\com\android\internal\telephony\blockchecker.java

public static boolean isblocked(context context, string phonenumber) {
 boolean isblocked = false;
 long starttimenano = system.nanotime();
 //cczheng add [s]
 log("phonenumber==="+phonenumber);
 boolean isintercept = settings.global.getint(context.getcontentresolver(), 
   settings.global.is_intercept_tele, 1) == 1;
 if (isintercept) {
  log("intercept tele don't delivery..... default is blocked");
  return true;
 }
 //cczheng add [e]
 try {
  if (blockednumbercontract.systemcontract.shouldsystemblocknumber(
    context, phonenumber)) {
   rlog.d(tag, phonenumber + " is blocked.");
   isblocked = true;
  }
 } catch (exception e) {
  rlog.e(tag, "exception checking for blocked number: " + e);
 }
 int durationmillis = (int) ((system.nanotime() - starttimenano) / 1000000);
 if (durationmillis > 500 || vdbg) {
  rlog.d(tag, "blocked number lookup took: " + durationmillis + " ms.");
 }
 return isblocked;
}

代码很简单,传递一个号码,去blockednumbercontract数据库中查找是否存在,存在即为黑名单,拦截,不存在则不拦截。

为了实现拦截的功能,我在前面加了判断,settings.global.is_intercept_tele 读取值,这是在settings中自定义的,当然你也可以采用sharedpreference保存,这样就可以动态的控制达到屏蔽短信和电话的功能。

当然如果你需要有黑名单列表,可在此处增加xml或者数据库查询,再做对应的拦截返回true操作。

屏蔽来电功能

方法同上

相关的简单分析

blockchecker的isblocked()方法,电话和短信都会走这里,如果你需要单独分开,那么就需要去跟踪各自从哪里调用过来的。

通过全局搜索,找到如下目录

vendor\mediatek\proprietary\packages\services\telecomm\src\com\android\server\telecom\callfiltering

•asyncblockcheckfilter.java
•blockcheckeradapter.java
•callfilteringresult.java
•callfilterresultcallback.java
•callscreeningservicefilter.java
•directtovoicemailcallfilter.java
•incomingcallfilter.java

asyncblockcheckfilter中调用 blockcheckeradapter 的isblocked(),而blockcheckeradapter最终调用到blockchecker中,所以要单独屏蔽电话,可在asyncblockcheckfilter中操作

 @override
protected boolean doinbackground(string... params) {
 try {
  log.continuesession(mbackgroundtasksubsession, "abcf.dib");
  log.addevent(mincomingcall, logutils.events.block_check_initiated);
  return mblockcheckeradapter.isblocked(mcontext, params[0]);
 } finally {
  log.endsession();
 }
}

接下来再来看短信的

vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\cdma\mtkcdmainboundsmshandler.java

vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\gsm\mtkgsminboundsmshandler.java

都是直接调用blockchecker的isblocked()方法

在settings中增加switch控制是否启用拦截

效果图

实际上就是添加一个switchpreference来控制 settings.global.is_intercept_tele 的值

在安全性和位置信息中添加 拦截设置选项

源码位置 vendor/mediatek/proprietary/packages/apps/mtksettings/src/com/android/settings/securitysettings.java

仿照security_settings_misc.xml增加一份 security_settings_blockcheck.xml

<preferencescreen xmlns:android="http://schemas.android.com/apk/res/android"
 android:title="@string/security_settings_title">
 <preferencecategory android:title="@string/security_blockcheck_title"
   android:persistent="false">
  <switchpreference
   android:key="is_intercept"
   android:title="@string/is_intercept"  android:summary="@string/is_intercept_summary"/>
 </preferencecategory>
</preferencescreen>

在securitysettings中findpreference("is_intercept"),监听onpreferencechange()事件,将回调结果 value 保存到is_intercept_tele

@override
public boolean onpreferencechange(preference preference, object value) {
 boolean result = true;
 final string key = preference.getkey();
 final lockpatternutils lockpatternutils = mchooselocksettingshelper.utils();

  if (key_is_intercept.equals(key)) {
  settings.global.putint(getcontentresolver(), settings.global.is_intercept_tele,
    ((boolean) value) ? 1 : 0);
 }
 return result;
}

总结

以上所述是小编给大家介绍的android8.1 通过黑名单屏蔽系统短信和来电功能,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网