7

Здравствуйте, я хочу выбрать контакт из нашей целевой задачи по умолчанию. Я попробовал несколько способов сделать это. Пожалуйста, найдите код ниже. Проблема со всем этим кодом заключается в том, что они открывают один экран промежуточных документов с несколькими вариантами, которые пользователь должен выбрать для контакта, а затем открывает контактную книгу.Выберите контакт непосредственно с целевого назначения контактов

private void openContactIntent() { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, ContactsContract.Contacts.CONTENT_URI); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    startActivityForResult(intent, REQ_CONTACT_DIRECTORY); 
} 

Я также попытался

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(intent, PICK_CONTACT); 

и

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
startActivityForResult(intent, PICK_CONTACT); 

То, что я вижу в качестве промежуточного экрана enter image description here

+0

'Intent намерения = новый Intent (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI) ; startActivityForResult (намерение, PICK_CONTACT); 'Он работает для меня! –

+0

Связано ли это с любой ОС? Я запускаю код на Android N. И для меня это не работает. Я не добавил никаких разрешений. –

+0

Я бегу Android N тоже! –

ответ

0

Это работает для меня:

Intent it= new Intent(Intent.ACTION_PICK, 
    ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(it, requestCode); 
2

Попробуйте следующий код, чтобы выбрать контакт:

Intent contactPickerIntent = новый Intent (Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult (contactPickerIntent, RESULT_PICK_CONTACT);

Вы можете получить необходимую информацию в onActivityResult следующим образом:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
      case RESULT_PICK_CONTACT: 
        Cursor cursor = null; 
    try { 
     String phoneNo = null; 
     String name = null; 

     Uri uri = data.getData(); 
     cursor = getContentResolver().query(uri, null, null, null, null); 
     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("Name and Contact number is",name+","+phoneNo); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
       break; 
     } 
    } else { 
     Log.e("Failed", "Not able to pick contact"); 
    } 
} 
+0

Это решение сработало для меня! –

+0

описание товара oH .. !! Здорово..!! –

5

Я тоже была такая же проблема. Наконец, я избавилась от промежуточного экрана сборщика, используя ниже кода,

Intent i=new Intent(Intent.ACTION_PICK); 
i.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(i, SELECT_PHONE_NUMBER); 

onActivityResult В ряде прибудет телефон, как показано ниже

if (requestCode == SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { 
    // Get the URI and query the content provider for the phone number 
    Uri contactUri = data.getData(); 
    String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}; 
    Cursor cursor = getContext().getContentResolver().query(contactUri, projection, 
     null, null, null); 

    // If the cursor returned is valid, get the phone number 
    if (cursor != null && cursor.moveToFirst()) { 
    int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
    String number = cursor.getString(numberIndex); 
    // Do something with the phone number 
    ... 
    } 

    cursor.close(); 
} 
Смежные вопросы