2013-09-01 105 views
17

我發現,這樣啓動聯繫人選擇器的過濾版本(只顯示有電話號碼的聯繫人),我就可以用這個:Android的聯繫人選擇器,只有電話號碼

Intent pickContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(pickContactIntent, CONTACT_PICKER_RESULT); 

所以這個作品。我只是想弄清楚如何獲取選中的聯繫人的姓名和電話號碼,現在,在onActivityResult方法中:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // what goes here... 
} 

我已經嘗試了一些內部onActivityResult不同的東西,但不要查詢不會返回號碼。

+0

可能重複[從Android應用中的聯繫人列表中選擇一個號碼和名稱](http://stackoverflow.com/questions/9496350/pick-a-number-and-name-from-contacts-list-in- android-app) – flx

+0

當我打開這樣的聯繫人選擇器時,我得到的光標總是空的。它會是什麼? – kommradHomer

回答

29
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
startActivityForResult(intent, 1); 

String phoneNo = null; 
Uri uri = data.getData(); 
Cursor cursor = getContentResolver().query(uri, null, null, null, null); 

if (cursor.moveToFirst()) { 
    int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
    phoneNo = cursor.getString(phoneIndex); 
} 

curosr.close(); 
+0

適合我,謝謝 – Soham

+1

超級作品也適合我,請標記爲正確答案。 – Naruto

+0

getColumnIndex返回-1'cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)' 這是正常的嗎? – behelit

2

建立在阿卡什的答案。

步驟1 - 需要在Manifest中添加讀/寫聯繫人權限。

<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<!-- OR - depends on the requiremnts--> 
<uses-permission android:name="android.permission.WRITE_CONTACTS"/> 

步驟2 - 那麼需要啓動聯繫人選取意圖,但之前需要檢查,如果聯繫許可(僅適用於Android> = 23)

if (hasPermissions(Manifest.permission.READ_CONTACTS)) { 
     Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
     startActivityForResult(intent, REQUEST_PICK_CONTACT); 
} else { 
    // Request Permissions 
} 

授予步驟3 - 然後需要獲得活動結果

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_PICK_CONTACT) { 
     String phoneNo = null; 
     String name = null; 

     Uri uri = data.getData(); 
     Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null); 

     if (cursor.moveToFirst()) { 
     int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
     int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

     phoneNo = cursor.getString(phoneIndex); 
     name = cursor.getString(nameIndex); 

     Log.e("onActivityResult()", phoneIndex + " " + phoneNo + " " + nameIndex + " " + name); 
     } 
     cursor.close(); 
    } 
} 

而且是多數民衆贊成它。

相關問題