2011-08-03 38 views
0

我正在製作一個使用聯繫人的Android應用程序。好事是我管理某種方式使它與Contacts.Phones一起使用,如許多教程中所見。問題是Contacts.Phones已被棄用,並被ContactsContract取代。我的應用程序需要從Android 1.5+開始工作。如何查詢Android中的聯繫人

我需要做一些簡單的操作,例如: - 查詢所有聯繫人 - 查詢特定聯繫人 - 備份所有聯繫人

什麼是實現這一目標的最佳途徑,考慮到我需要的應用程序在所有版本的Android上工作。我需要檢查手機上當前的api級別,並有2個代碼塊,一個之前的api 5之前?

回答

1

這是一個可選的解決方案

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

0

使用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 
      } 
      } 
    } 
相關問題