您的位置:首页 > 其它

MTK平台上电话黑名单功能总结

2016-08-01 11:30 483 查看
作者 Zhonglong.chen

黑名单作为一项非常重要的功能,一直以来Android原生都没有提供支持,因此各芯片厂商都有自己的实现方案。本文总结了MTK平台芯片在Android 4.4,Android 5.x和Android 6.0这三个版本上黑名单功能的实现方式。

MTK平台上以Content Provider的形式提供黑名单数据库的接口,但在三个版本上实现略有差异。

1. Android4.4

l  Number:电话号码

l  Type:枚举型,取值为BLOCK_VOICE_CALL,BLOCK_VIDEO_CALL和BLOCK_VOICE_AND_VIDEO_CALL三种,可见视频电话与普通电话黑名单是可以分开管理的

2. Android5.x

l  Number:电话号码

Android 5.x引入了MPlugin架构,将黑名单数据库放到OPxxPlugin中实现,与Android 4.4相比黑名单数据库变化不大,只是移除Type字段,不再区分视频电话和普通电话。

3. Android6.0

l  PHONE_NUMBER:电话号码

l  NAME:联系人姓名,可为空

Android 6.0将黑名单功能从OPxxPlugin中独立出来,放到单独的Blacklist模块中实现,并且数据库变化也非常大。

表1 MTK平台上三个版本黑名单对比
 

Android 4.4

Android 5.x

Android 6.0

CONTENT_URI

content://reject/list

content://reject/list

content://com.cmcc.ccs.black_list

表结构

Number

Type

Number

PHONE_NUMBER

NAME

访问权限

READ_REJECT & WRITE_REJECT

READ_REJECT & WRITE_REJECT



实现类

未知

OP01Plugin.apk

com.mediatek.phone.callrejection.CallRejectContentProvider

Blacklist.apk

com.mediatek.rcs.blacklist.BlacklistProvider

代表芯片

MT6582

MT6753

MT6755

 

4. 查询黑名单

黑名单数据库中存储的是原始的电话号码,并未进行格式化,因此不能直接通过query方式查询某个号码是否黑名单,而必须读出黑名单中的所有电话号码,再通过PhoneNumberUtils.compare方法逐个进行模糊匹配。

    publicboolean
autoReject(String
number){
       Cursor
cursor =
null;
       cursor =
mContext.getContentResolver().query(Uri.parse(RCS_BLACK_LIST_URI),
                    RCS_BLACK_LIST_PROJECTION,
null,
null,
null);
       if (cursor ==
null) {
           return false;
       }
       String
blockNumber;
       boolean result =
false;
       cursor.moveToFirst();
       while (!cursor.isAfterLast())
{
           blockNumber =
cursor.getString(0);
           if (PhoneNumberUtils.compare(number,
blockNumber)) {
                result =
true;
                break;
           }
           cursor.moveToNext();
       }
       cursor.close();
       return result;
   }

 

5. AndroidN

Android N原生提供黑名单数据库支持,实现类在android.provider.BlockedNumberContract,提供的接口主要有:

l  canCurrentUserBlockNumbers:判断能否访问黑名单数据库,只有默认的电话/短信等少数应用才可以访问

l  isBlocked:判断某个号码是否黑名单

BlockedNumberContract只保存黑名单电话号码,不会自动关联联系人,并且除了保存原始电话号码在COLUMN_ORIGINAL_NUMBER外,还自动生成并保存格式化的电话号码在COLUMN_E164_NUMBER。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: