2013-09-01 40 views
17

tôi tìm thấy trên SO rằng để khởi động một phiên bản được lọc chọn tiếp xúc (mà chỉ hiển thị danh bạ có số điện thoại), tôi chỉ có thể sử dụng này:Android Liên Picker với số điện thoại duy nhất

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

Vì vậy, tác phẩm này . Tôi chỉ cố gắng để tìm ra cách để lấy lại tên và số điện thoại của số liên lạc được lựa chọn bây giờ, trong phương pháp onActivityResult:

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

Tôi đã thử một số thứ khác nhau bên trong onActivityResult, nhưng các truy vấn don không trả lại số.

+0

bản sao có thể có của [Chọn một số và tên từ danh sách liên hệ trong ứng dụng Android] (http://stackoverflow.com/questions/9496350/pick-a-number-and-name-from-contacts-list-in- android-app) – flx

+0

khi tôi mở bộ chọn địa chỉ liên hệ như thế này, con trỏ tôi nhận được luôn trống. Nó có thể là gì? – kommradHomer

Trả lời

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

Làm việc cho tôi, cảm ơn – Soham

+1

Siêu hoạt động cho tôi quá ,, hãy đánh dấu nó là câu trả lời đúng. – Naruto

+0

getColumnIndex trả về -1 'cursor.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER)' Điều này có bình thường không? – behelit

2

Xây dựng dựa trên câu trả lời của Akash.

Bước 1 - cần thêm quyền đọc/ghi liên hệ trong tệp kê khai.

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

Bước 2 - sau đó cần phải khởi động chọn tiếp xúc ý định, nhưng trước nhu cầu đó để kiểm tra xem sự cho phép của Liên được cấp (chỉ dành cho 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 
} 

Bước 3 - sau đó cần tải kết quả hoạt động

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

Và vâng vâng.

Các vấn đề liên quan