Android 查看通讯录Contacts是否发生变化

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

根据:參见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));
    }
时间: 2024-11-10 11:36:14

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

Android 获取通讯录联系人

public static Map<String,String> getAllCallRecords(Context context) { Map<String,String> temp = new HashMap<String, String>(); Cursor c = context.getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, Contac

Android使用通讯录的权限问题

06-02 11:49:53.676: E/AndroidRuntime(12974): FATAL EXCEPTION: main06-02 11:49:53.676: E/AndroidRuntime(12974): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*****.Main}: java.lang.SecurityException: Permission Denial: reading

Android手机通讯录备份还原代码

实现方法很简单1.把通讯录中的联系人,电话号码保存到txt文件中完成备份.2.读取txt文件,导入到通讯录完成还原. 具体代码1.添加 通讯录读写权限,存储卡写权限 <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><uses-permission android:name="android.permission.WRITE_EXT

android 读取通讯录显示到gridview

........... <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" and

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

Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉,我需要调试一个USB设备这样也无法用usb来输出logcat. 因为这个USB设备需要内核驱动支持,因此无法在其它设备调试. 因此有的方法有,一般想到用蓝牙输出logcat,但这是Android wear 才支持的特性. 在代码中加入捕获错误和异常代码,写入sd卡,这个工作量较大,而且麻烦 二.简单的解决办法 1.安装Android Terminal 软件. 一个可用链接是 ht

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

注:本片整理自 http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME. 1 public void fetchAllContacts() { 2 ContentResolver contentResolver = this.getContentResolver(); 3 Cursor cursor = contentResolver.query(android

Android查看网络图片例子

1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_hei

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

Android 查看项目依赖树的四种方式: 方式一: ./gradlew 模块名:dependencies //查看单独模块的依赖 ./gradlew :app:dependencies --configuration compile //查看项目的编译依赖 方式二:使用Gradle Project 方式三:安装Android Studio插件 gradle view 方式四:如果你嫌在命令行窗口展示观看不友好,这里还有一种体验更好的方式. 输入下面命令行: ./gradlew build --

Android手机通讯录项目开发--联系人数据库contacts2.db介绍

项目描述:该项目为基于Android平台的手机通讯录,主要模块分为四个部分:联系人管理模块,通话记录管理模块,短信管理模块,系统设置模块. 系统结构图如下: 本项目启动时间:2014年5月28日 说明:本次开发项目的所有源码全部会分享给大家.开发此项目的目的有这几点:一.锻炼独立开发项目的能力,二.增加对Android开发的了解,三.熟悉Android通讯录机制. 闲话不多说,正式开始! 技术要点一:熟悉Android联系人数据库contacts2.db 1.获得联系人数据库contacts2.