android 添加MCCMNC自动号码匹配后拨号匹配不到联系人

由于不同的sim卡对应不同的mccmnc, 导致min_match的值发生变化,

新的min_match值与之前phone_lookup表中保存的min_match不一直,导致无法匹配上。

修改如下:

1. 添加URI

修改ContactsProvider2.java,

private static final int PHONE_LOOKUP = 4000;

下面加入一行:

private static final int PHONE_LOOKUP2 = 4001;  // New Add

matcher.addURI(ContactsContract.AUTHORITY, "provider_status", PROVIDER_STATUS);

下面加入一行:

matcher.addURI(ContactsContract.AUTHORITY, "phone_lookup2", PHONE_LOOKUP2);    // New Add

2. 实现处理对应URI的方法

修改contactsProvider2.java 的 updateInTransaction().

case PHONE_LOOKUP2:

final SQLiteDatabase mDb = mDbHelper.get().getWritableDatabase();    // mDb

Cursor c = mDb.query(Tables.PHONE_LOOKUP,

new String[]{ PhoneLookupColumns.DATA_ID,

PhoneLookupColumns.RAW_CONTACT_ID,

PhoneLookupColumns.NORMALIZED_NUMBER,

PhoneLookupColumns.MIN_MATCH },

null, null, null, null, null);

while(c.moveToNext()) {

long dataId = c.getLong(0);

long rawContactId = c.getLong(1);

String normalizeNumber = c.getString(2);

String oldMinMatch = c.getString(3);

ContentValues phoneValues = new ContentValues();

phoneValues.put(PhoneLookupColumns.RAW_CONTACT_ID, rawContactId);

phoneValues.put(PhoneLookupColumns.DATA_ID, dataId);

phoneValues.put(PhoneLookupColumns.NORMALIZED_NUMBER, normalizeNumber);

// get minMatch

Log.d(TAG, "[PHONE_LOOKUP2]1.normalizeNumber:" + normalizeNumber);

String minMatch = PhoneNumberUtils.toCallerIDMinMatch(normalizeNumber);

phoneValues.put(PhoneLookupColumns.MIN_MATCH, minMatch);

Log.d(TAG, "[PHONE_LOOKUP2]2.normalizeNumber:" + normalizeNumber + "  oldMinMatch:" + oldMinMatch + "  minMatch:" + minMatch);

mDb.update(Tables.PHONE_LOOKUP, phoneValues, PhoneLookupColumns.DATA_ID + "=" + dataId + " AND " + PhoneLookupColumns.RAW_CONTACT_ID + "=" + rawContactId, null);

}

c.close();

break;

3. 启动更新phone_lookup表的min_match

------------[JB 4.2]------------

修改Contacts包下的AbstractStartSIMService.java

Case FINISH_IMPORTING 这个case下面的 break 前面的 canStopSelf()之前加入如下代码:

... ...

if (canStopSelf) {

Log.i(TAG, "Will call stopSelf here.")

// New add

ContentResolver contentResolver = mContext.getContentResolver();

Uri uri = Uri.parse("content://com.android.contacts/phone_lookup2");

contentResolver.update(uri, new ContentValues(), null, null);

// End

stopSelf();

}

------------[KK 4.4]------------

修改SIMProcessorManager.java,SIMProcessorManager() --> handleMessage(),

在callStopService()之前加入如下代码:

... ...

LogUtils.d(TAG, "handleMessage MSF_SEND_STOP_SERVICE");

// New add

ContentResolver contentResolver = mContext.getContentResolver();

Uri uri = Uri.parse("content://com.android.contacts/phone_lookup2");

contentResolver.update(uri, new ContentValues(), null, null);

// End

callStopService();

... ...

时间: 2024-08-13 21:42:58

android 添加MCCMNC自动号码匹配后拨号匹配不到联系人的相关文章

perl学习之:肯定匹配和否定匹配

tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力m/ /  s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力 $string = "25abc8";$string =~ /abc(?=[0-9])/;(?=pattern) 前看声明,如果正则表达式在下一次匹配 pattern 风格,就开始匹配,而且不影响匹配效果.如/\w+(?=\t)/将匹配制表符是否恰好在一个字\w+后面出现,并且制表符不添加到$&的值中:$matched = $&

android添加edittext后布局就不好用

在布局添加控件手动添加还是拖的添加,添加edittext后布局就不好用,其他控件好用,然后就说下面这段话 Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V Exception details are logged in Window > Show View > Error Log Check the "Android version to use when rendering layouts

Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用aapt命令生成R.java文件 2.用aidl命令生成相应java文件 3.用javac命令编译java源文件生成class文件 4.用dx.bat将class文件转换成classes.dex文件 5.用aapt命令生成资源包文件resources.ap_ 6.用apkbuilder.bat打包资源

Cocos2d-x Android.mk文件自动修改器

做cocos2d-x的项目,一般是用电脑进行开发,然后移植到手机平台上.移植到安卓手机需要用eclipse等工具重新编译打包成apk文件.而用eclipse打包的话,要把项目的cpp文件一条条加入到Android.mk配置中,文件少无所谓,但如果文件很多,手工添加就比较麻烦了,特别是有些时候,要和原先的Andriod.mk配置做比较,本次新增了哪些文件,然后把新增的文件添加进去. 总之,打包成apk,手工修改Android.mk配置很麻烦.所以,我做了一个自动修改器.如下图: 我的Cocos2d

jquery mutilselect 插件添加中英文自动补全

jquery mutilselect默认只能根据设置的option来进行自动提示 $.each(availableTags, function(key, value) { $('#channels') .append($("<option></option>") .attr("value",value) .text(value)); //默认按text中的value来自动提示 }); 阅读下面的需求: 有这么几个选项: 北京 天津 湖北 输入

Android开发之自动登录功能的实现

在我们平时使用的手机应用都可以实现只需要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有QQ的登陆框是如何记忆我们的隐身登陆,保存账号选项的呢,这些都是通过使用SharedPreferences共享参数效果实现的,而无须使用数据库来存储.以下我们直接看详细代码分析. package com.example.account.login; import java.util.HashMap; import java.util.Map; import com.android.dao.MySQ

使用Jenkins进行android项目的自动构建(3)

建立Jenkins项目 1. "新增作业"->填写作业名称->选择"建置 Maven 2 或 3 專案"->OK.新增成功后会进入"組態設定",暂时先保留默认值,稍后再进行设定. 2. 按一下"马上建置",会显示"已排入建置",然后在"建置歷程"会见到#1的链接,点入该链接并选择"終端機輸出",这时会见到一个失败的构建记录.当然会失败,因为我们还未为

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>,该文对本文要使用的action.category以及data都进行了详细介绍. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 概述 我们知道,Intent是分两种的:显式Intent和隐式Intent.如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否

Android 开源组件 ----- Android LoopView无限自动轮转控件

Android 开源组件 ----- Android LoopView无限自动轮转控件 2015-12-28 15:26 by 杰瑞教育, 32 阅读, 0 评论, 收藏, 编辑 一.组件介绍 App产品中信息列表头部都会有自动轮转的广告图片,使用ViewPager可以实现但编码比较麻烦,我们可以采用使用LoopView开源控件来完成, LoopView是一个强大的轮转大图控件,并且提供了许多配置方法足以满足你的应用需求 二.环境配置 如果您的项目使用 Gradle 构建, 只需要在您的buil