目的:确定通讯录是否发生变化

根据:參见ContactsContract.RawContacts类中的VERSION常量,该值是仅仅读的,当通讯录发生变化时,都会使该值变化

方法:version值是相应每条通讯录数据的,假设有100条,则有100个该值,我说採用的推断方法是这种

1、获取全部version值,组成字符串

2、因为该字符串可能非常长,所以採用MD5变换短字符串

3、与之前的字符串比較,将新的保存到SharedPreferences

以下三段代码则实现了查看通讯录是否变化

/**
* 获得通讯录的version
*
* @return
*/
private String getContactsVersion() {
String version = null;
StringBuffer sb = new StringBuffer();
Cursor raws=null;
try{
raws = mContext.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,
null, null, null, null);
while (raws.moveToNext()) {
version = raws.getString(raws.getColumnIndex(ContactsContract.RawContacts.VERSION)); sb.append(version);
}
}catch(Exception e){
e.printStackTrace();
}finally
{
if(raws!=null){
raws.close();
} } return sb.toString();
}
 /**
* 将字符串version转换成MD5格式的
*
* @param s
* @return
*/
private String stringToMd5(String s) {
byte[] value = s.getBytes();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(value);
byte[] temp = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : temp) {
sb.append(Integer.toHexString(b & 0xff));
}
String md5Version = sb.toString();
Editor editor = spf.edit();
editor.putString("contact_version", md5Version);
editor.commit(); return md5Version;
} catch (NoSuchAlgorithmException e) { e.printStackTrace();
}
return null;
}
 /**
* 推断是不是有更新通讯录 返回true表示有更新,返回false表示没有更新
*/
public Boolean isContactUpdate() {
String oldVersion = spf.getString("contact_version", "first");
String newVersion = stringToMd5(getContactsVersion());
if (Log.isLoggable("version", Log.DEBUG)){
Log.d("version", "old version---" + oldVersion);
Log.d("version", "new version---" + newVersion);
} return (!newVersion.equals(oldVersion));
}

Android 查看通讯录Contacts是否发生变化的更多相关文章

  1. Android API之android.provider.ContactsContract.Contacts

    android.provider.ContactsContract.Contacts 对应contacts数据表.RawContacts的一个聚合(aggregate)代表同一个人.每个人在数据表co ...

  2. Android:联系人Contacts之ContentResolver query 参数详解

    注:本片整理自 http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人N ...

  3. Android向通讯录添加联系人的一般方法

    Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: 测试代码,关键的内容就在add函数里面. package zhangphil.demo; import an ...

  4. [ 原创 ]学习笔记-Android 学习笔记 Contacts (一)ContentResolver query 参数详解 [转载]

    此博文转载自:http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NA ...

  5. Android 查看 无wifi/usb设备的logcat方法

    Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉.我须要调试一个USB设备这样也无法用usb来输出logcat. 由于这个USB设备 ...

  6. Android 查看App冷启动时间/热启动时间/页面打开时间

    Android 查看App冷启动时间/热启动时间/页面打开时间 冷启动时间 热启动时间 页面打开时间 通过adb查看 adb shell am start -W packageName/Activit ...

  7. Android 查看Apk签名方式V1和V2

    Android 查看Apk签名方式V1和V2 java -jar apksigner.jar verify -v my.apk -- Verifies Verified using v1 scheme ...

  8. Android 查看项目依赖树的四种方式

    Android 查看项目依赖树的四种方式: 方式一: ./gradlew 模块名:dependencies //查看单独模块的依赖 ./gradlew :app:dependencies --conf ...

  9. android操作通讯录的联系人

    界面配置文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     and ...

随机推荐

  1. 不可或缺的企业OA面临问题,以及解决建议 软件定制开发 森普演示平台

    ---恢复内容开始--- 随着信息时代的来临,企业管理也相应的信息化,各种管理软件相继而出,各行各业的信息化有过成功,也有过失败(注:是以该项目是否达到用户的预期目标而言).据统计在信息化失败的案例中 ...

  2. Python 字符串相关操作

    # 1 * 重复输出字符串 print('hello'*2) # 2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表 print('helloworld'[2: ...

  3. Mac 删除Openfire

    首先,确保你已经关掉了openfire 打开终端 (在应用程序-->实用工具-->) 输入以下命令 sudo rm -rf /Library/PreferencePanes/Openfir ...

  4. java 读取固定目录下的文件(和上篇差点儿相同)

    package gao.org; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Fi ...

  5. 《JavaScript 闯关记》之变量和数据类型

    当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量,值的类型称作数据类型. 变量 JavaScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据.换句话说,每个变量仅仅是 ...

  6. Model注解的后台原理

    Asp.net MVC的验证特性是由模型绑定器.模型元数据.模型验证器和模型状态组成的协调系统的一部分. 1.验证和模型绑定 默认情况下,Asp.net MVC框架在模型绑定石执行验证逻辑,在操作方法 ...

  7. differ比较两个字符串的差异

    "abcde","abdefk"  ---->-c,+f,+k "aba","aababb"    -----&g ...

  8. (转)Java字符串应用之密码加密与验证

    1.通过java.Security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入”MD5“则表示使用MD5算法    2.Message ...

  9. C# 限制Text只能输入数字

    private void InputNumber(KeyPressEventArgs e) { //如果输入的不是数字键,也不是回车键.Backspace键,则取消该输入 && e.K ...

  10. STM32的例程GPIO的汇编指令初探

    任务一:寻找main函数的汇编指令集 任务二:寻找main函数中的SystemClock_Config函数的汇编指令集 寻找main函数的汇编指令集 运行例程中GPIO工程时,总会加载startup_ ...