前言

本文的源码采用anroid9的
首先待拦截的号码需要进行存储,而且号码的个数肯定很多,用户使用的情况复杂,所以选择数据库进行存储。拦截层需要在系统中进行,所以上层APP需要访问数据,所以数据库不能是本地数据库,需要是以contentprovider形式提供服务。

frameworks/base/core/java/android/provider/BlockedNumberContract.java

BlockedNumberContract中包含了:

  • BlockedNumbers ,存取黑名单号码&content_uri
  • SystemContract 系统与黑名单ContentProvider的联系接口
  • BlockSuppressionStatus

桥接器类

BlockChecker 是在 InboundSmsHandlerBlockedNumberContract之间的一个类,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

更多相关文章

  1. 使用selector修改TextView中字体的颜色
  2. Android(安卓)ORM 数据库的使用
  3. Android中关于SQLite数据库的一些知识
  4. Android(安卓)Compile
  5. android 7.0 使用apktool反编译apk
  6. Android短信转发默认不需要转发号码修改方法
  7. Android中可自由移动悬浮窗口的Demo
  8. android 图片浏览器 APP 源码
  9. 拨云见日---android异步消息机制源码分析(二)

随机推荐

  1. Android(安卓)版本速查表
  2. Testing Your Android(安卓)GCM Broadcas
  3. Android(安卓)ramdisk.img system.img us
  4. Cell phone privacy guide (Android)
  5. android UI——跑马灯TextView
  6. android 隐藏自己的多媒体文件
  7. android开发文档之onTouch()
  8. 安卓应用-去掉标题栏
  9. android错误信息大整理
  10. Android(安卓)phone policy