Android Contact Picker с номерами телефонов
Я нашел на SO, что для запуска отфильтрованной версии кнопки выбора контактов (которая показывает только контакты с телефонными номерами) я могу просто использовать это:
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, но запросы не возвращают номер.
Ответы
Ответ 1
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();
Ответ 2
Основываясь на ответе Акаша.
Шаг 1 - нужно добавить разрешения на чтение/запись в манифесте.
<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();
}
}
И да, это так.