MTK方案上基于Android N拦截黑名单中的短/彩信的方法

本文详细介绍了在Android N的MTK方案中如何实现对黑名单短信和彩信的拦截。通过在SmsReceiverService和MmsPushReceiveService中添加逻辑,设置特殊字段标记拦截状态,并在数据库中更新消息类型,从而达到拦截并隐藏黑名单联系人的短彩信目的。同时讨论了拦截流程和涉及的关键类与方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--- 作者 zuhui.zhang


安卓7.0原生系统增加了在framework层拦截黑名单来电和短信,但不会将数据保存到数据库,因此无法查看到被拦截的来电和短信。在安卓7.0之前,黑名单的短信默认是不会拦截的,为了实现黑名单短信拦截功能,需要对短信数据库表中的字段新增特殊的值,以便标记黑名单短信。以下具体说明下笔者对于MTK方案里的短信应用中拦截短彩信的实现方法。

一、拦截黑名单短信

涉及到的类:

com.android.mms.transaction.SmsReceiverService:短信接收服务类,

MyBlacklistManager:新创建的类,用于判断号码是否在黑名单、添加号码到黑名单、移除号码。

a)   实现思想:

在SmsReceiverService. handleSmsReceived()中,判断新来短信的号码是否是在黑名单中,如果是,则将Sms.READ设为1,同时将Sms.TYPE设为MyBlacklistManager. MESSAGE_TYPE_INTERCEPTED=7,然后保存到短信收件箱。要查看拦截短信时,只要查询数据库过滤出Sms.TYPE=7的短信,则为被拦截的黑名单短信。

b)   具体实现方法:

插入拦截字段:在SmsReceiverService .handleSmsReceived()中,在insertMessage()->storeMessage()函数中判断是否是黑名单,若是,则在sms表的type字段插入拦截类型的值(MESSAGE_TYPE_INTERCEPTED),read字段设为1:防止在launcher上显示未读短信数量,并MyBlacklistManager类使用一个布尔型变量记录已经成功拦截短信。

只通知被拦截的短信:在handleSmsReceived中,在insertMessage()调用之后,通过调用MyBlacklistManager中的autoReject()判断号码是否在黑名单列表中,如果是则只发出通知(隐藏部分信息),但是不会亮屏、发出通知音和振动。

其中autoReject()方法和方法中用到的变量如下:

// blacklist table uri

// private static final Uri BLACK_LIST_URI =Uri.parse("content://reject/list");// for android 4.4 to 5.x

private static final Uri BLACK_LIST_URI = Uri.parse("content://com.cmcc.ccs.black_list");// for android 6.0

// table field name

private static final String REJECT_FIELD_NUMBER="PHONE_NUMBER";

/**

* check if the number should be rejected

* @param number the sms/mms recipient

* @param type reject type, inBlackListManager class had define

* @return the result that the currentnumber should be auto reject, true:in blacklist, or not in.

*/

public static boolean</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值