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));
    }



  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值