关于Android(安卓)O系统短信拦截的流程
16lz
2021-01-24
前言
本文的源码采用anroid9的
首先待拦截的号码需要进行存储,而且号码的个数肯定很多,用户使用的情况复杂,所以选择数据库进行存储。拦截层需要在系统中进行,所以上层APP需要访问数据,所以数据库不能是本地数据库,需要是以contentprovider形式提供服务。
frameworks/base/core/java/android/provider/BlockedNumberContract.java
BlockedNumberContract中包含了:
- BlockedNumbers ,存取黑名单号码&content_uri
- SystemContract 系统与黑名单ContentProvider的联系接口
- BlockSuppressionStatus
桥接器类
BlockChecker 是在 InboundSmsHandler 与BlockedNumberContract之间的一个类,InboundSmsHandler不直接调用BlockedNumberContract的方法。根据设计模式的定义,BlockChecker是一个桥接器类。
拦截
InboundSmsHandler短信转发是在这个类中。
/** * Process the inbound SMS segment. If the message is complete, send it as an ordered * broadcast to interested receivers and return true. If the message is a segment of an * incomplete multi-part SMS, return false. * @param tracker the tracker containing the message segment to process * @return true if an ordered broadcast was sent; false if waiting for more message segments */ // MTK-START // Modification for sub class protected boolean processMessagePart(InboundSmsTracker tracker) {... // +Clown@20140217, Sprint Reassemble SMS may had duplicate fragment in raw table // we need delete the raw table by id for avoid the duplicate one be deleted. boolean isSprintReassembleSms = bundle.getBoolean("isSprintReassembleSms"); long[] ids = new long[messageCount]; //huangchunmao end if (messageCount == 1) { // single-part message pdus = new byte[][]{tracker.getPdu()}; block = BlockChecker.isBlocked(mContext, tracker.getDisplayAddress(), null); } else { ... if (block) { deleteFromRawTable(tracker.getDeleteWhere(), tracker.getDeleteWhereArgs(), DELETE_PERMANENTLY); return false; }
Provider
privider 的apk源码在:packages/providers/BlockedNumberProvider/;文件结构很简单
src/└── com └── android └── providers └── blockednumber ├── BlockedNumberBackupAgent.java ├── BlockedNumberDatabaseHelper.java ├── BlockedNumberProvider.java └── Utils.java
更多相关文章
- 使用selector修改TextView中字体的颜色
- Android(安卓)ORM 数据库的使用
- Android中关于SQLite数据库的一些知识
- Android(安卓)Compile
- android 7.0 使用apktool反编译apk
- Android短信转发默认不需要转发号码修改方法
- Android中可自由移动悬浮窗口的Demo
- android 图片浏览器 APP 源码
- 拨云见日---android异步消息机制源码分析(二)