Подтвердить что ты не робот

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, но запросы не возвращают номер.

4b9b3361

Ответ 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();
  }
}

И да, это так.