如何查询Android中的联系人

问题描述:

我正在制作一个使用联系人的Android应用程序。好事是我管理某种方式使它与Contacts.Phones一起使用,如许多教程中所见。问题是Contacts.Phones已被弃用,并被ContactsContract取代。我的应用程序需要从Android 1.5+开始工作。如何查询Android中的联系人

我需要做一些简单的操作,例如: - 查询所有联系人 - 查询特定联系人 - 备份所有联系人

什么是实现这一目标的最佳途径,考虑到我需要的应用程序在所有版本的Android上工作。我需要检查手机上当前的api级别,并有2个代码块,一个之前的api 5之前?

这是一个可选的解决方案

int apiVersion = android.os.Build.VERSION.SDK_INT; 

    if(apiVersion < 5) { 
     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(People.CONTENT_URI, 
      null, null, null, null); 
     if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(cur.getColumnIndex(People._ID)); 
      String name = cur.getString(cur.getColumnIndex(People.DISPLAY_NAME)); 
     } 
     } 
    } else { 
     String columns[] = new String[]{ ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME };  
     Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, 
         columns,     
         null,    
         null,    
         ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
     if (cursor.getCount() > 0) { 
      while (cursor.moveToNext()) { 
       long id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 
       String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)).trim(); 

      } 
     } 
    } 

而且这里的教程,使应用程序Supporting the old and new APIs in the same application这一定帮助你。

+0

这就是我所害怕的。感谢您的回答和链接。 – Alin

使用ContentResolver。试试这个代码:

ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
       null, null, null, null); 
     if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(
         cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cur.getString(
         cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      //Query phone here. Covered next 
      } 
      } 
    }