Нет телефона от ContactsContract - PullRequest
0 голосов
/ 01 апреля 2012

У меня возникли проблемы с получением номера телефона от контакта с помощью ContactsContract. Мой код:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
if (resultCode == RESULT_OK) {  
    switch (requestCode) {  
    case CONTACT_PICKER_RESULT:  
           Cursor cursor = null;
           String phone = "";
           try {
               Bundle extras = data.getExtras();
               Set<String> keys = extras.keySet();
               Iterator<String> iterate = keys.iterator();
               while (iterate.hasNext()) {
                   String key = iterate.next();
                   Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]");
               }

               Uri result = data.getData();
               Log.v(DEBUG_TAG, "Got a contact result: " + result.toString());

               // get the contact id from the Uri
               String id = result.getLastPathSegment();
               cursor = getContentResolver().query(Phone.CONTENT_URI,null, Phone.CONTACT_ID + "=?", new String[] { id },null);

               int PhoneIdx = cursor.getColumnIndex(Phone.NUMBER);


               if (cursor.moveToFirst()) {
                   phone = cursor.getString(PhoneIdx);
                   Log.v(DEBUG_TAG, "Got number: " + phone);

               } else {
                   Log.w(DEBUG_TAG, "No results");
               }

           } catch (Exception e) {
               Log.e(DEBUG_TAG, "Failed to get Number", e);

           } finally {
               if (cursor != null) {
                   cursor.close();
               }
               EditText ponenumber = (EditText) findViewById(R.id.editPhone1);
               ponenumber.setText(phone);

               if (phone.length() == 0) {
                   Toast.makeText(this, "Contact has no phone number",
                           Toast.LENGTH_LONG).show();
               }

           }
        break;  
    }  

} else {  
    Log.w(DEBUG_TAG, "Warning: activity result not ok");  
}  

}

Всякий раз, когда я запускаю его и выбираю контакт, я просто получаю "У контакта нет номера телефона ".Я не могу понять, почему, у кого-нибудь есть идеи?

С уважением

1 Ответ

0 голосов
/ 06 августа 2017

Вы должны использовать намерение «Выбор телефона», а не «Сборщик контактов»:

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_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[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = 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(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            ...
        }
    }
}

Взято из документов по адресу: https://developer.android.com/guide/components/intents-common.html#Contacts

Чтобы получитьПользователь выбирает конкретную информацию из контакта, такую ​​как номер телефона, адрес электронной почты или другой тип данных, использует действие ACTION_PICK и указывает тип MIME для одного из типов содержимого, перечисленных ниже, таких как CommonDataKinds.Phone.CONTENT_TYPE.чтобы получить номер телефона контакта.

...