1

我正在關注此示例retrieve list of contacts以從Android設備檢索聯繫人。 它提供了所有聯繫人,其中包括電子郵件聯繫人和一些空的聯繫人。如何從Android設備獲取電話號碼聯繫人

我嘗試修改ContactsContract,如投影和選擇ContactsContract.Contacts.HAS_PHONE_NUMBER以獲得移動聯繫人,但沒有任何結果。

String[] PROJECTION = {ContactsContract.Contacts._ID,ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID,
SORT_ORDER,ContactsContract.Contacts.HAS_PHONE_NUMBER};
 

串選擇= ContactsContract.Contacts.DISPLAY_NAME + 「<> ''」 + 「和」 ContactsContract.Contacts.IN_VISIBLE_GROUP + 「= 1」;

任何想法只獲得有移動號碼的聯繫人?

+0

使用'ContactsContract.CommonDataKinds.Phone.CONTENT_URI' – pskink

+0

@pskink我試圖通過Phone.CONTENT_URI的選擇,但給人無法識別的記號例外。 – Mukesh

+1

爲什麼在投影中有SORT_ORDER和HAS_PHONE_NUMBER? HAS_PHONE_NUMBER應該處於選中狀態 - 因爲您似乎想要根據它進行選擇。使用選擇=「HAS_PHONE_NUMBER = 1」並在正確的參數中傳遞適當的排序順序以進行查詢。 – RocketRandom

回答

1

您可以使用此代碼來獲取所有聯繫人姓名和電話號碼

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
while (phones.moveToNext()) 
{ 
    String contactName=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

} 
phones.close(); 
+0

這真的工作,我們可以避免獲得電子郵件聯繫人,但是1.如何按此查詢顯示名稱排序2.如何消除重複的電話號碼 – Mukesh

+0

您可以利用Collections類來執行排序和其他操作 –

0

只顯示聯繫人與電話號碼和開聯繫人列表的意圖:

Intent pickContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); // Uri.parse("content://contacts") 
// Show only user contacts with phone numbers 
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); // Show only user contacts with phone numbers 
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 

從響應/取得聯繫的電話號碼:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_CONTACT_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      Uri contactUri = data.getData(); 
      String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER}; 

      Cursor cursor = getActivity().getContentResolver().query(contactUri, projection, null, null, null); 
      if (cursor == null) { 
       // show error msg 
       return; 
      } 
      cursor.moveToFirst(); 

      int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      if (column >= 0) { 
       String phoneNo = cursor.getString(column); 
       sendSmsMessage(phoneNo); 
      } else { 
       // show error msg 
      } 
      cursor.close(); 
     } 
    } 
} 

請確保您還處理API 23+

android.permission.READ_CONTACTS 
相關問題