Список контактов Android для получения номера телефона

1

Привет, я пытаюсь использовать этот код в своем приложении, я могу получить список контактов, но когда я нажимаю на имя контакта, я не получил ничего в своем edittext, который я ожидал получить номер контактного телефона извините за мой бедный английский

         public void doLaunchContactPicker(View view) {
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                Contacts.CONTENT_URI);
        startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode=RESULT_OK) {
            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.DATA);


                    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 Number", e);
                } finally {
                    if (cursor != null) {
                        cursor.close();
                    }
                    EditText ponenumber = (EditText) findViewById(R.id.ednum);
                    ponenumber.setText(phone);

                    if (phone.length() == 0) {
                        Toast.makeText(this, "No number found for contact.",
                                Toast.LENGTH_LONG).show();
                    }

                }

                break;
            }

        } else {
            Log.w(DEBUG_TAG, "Warning: activity result not ok");
        }
    }
Теги:
contact
picker

4 ответа

6
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);

while (phones.moveToNext())
{
     String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
     String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}
  • 0
    Безусловно, самый быстрый ответ здесь, однако следует отметить, что нужно будет выполнить собственную проверку дубликатов.
4

Ты действительно очень близкий. Несколько вещей.

  • Ваш оператор switch основывается на resultCode, а не на коде запроса. Измените это. Он должен прочитать "switch (requestCode)"

  • Phone.DATA будет работать, но вместо этого используйте Phone.NUMBER для удобства чтения:)

  • Убедитесь, что у вас есть разрешение для android.permission.READ_CONTACTS, установленное в вашем файле AndroidManifest.xml, как элемент внутри элемента манифеста, но не в элементе приложения. Строка должна выглядеть так.

    <uses-permission android:name="android.permission.READ_CONTACTS" />

Я внес эти изменения в ваш образец и получил рабочий код.

  • 0
    Спасибо Александр, я меняю на «switch (requestCode)» и phone.Data на Phone.Number, и я уверен, что у меня есть разрешение, но оно не работает, я могу получить список контактов, но когда я выбираю контакт, ничего не происходит, поэтому, пожалуйста, помогите мне я не знаю, что делать, и это действительно важно для меня
  • 0
    Что обнаружилось в вашем журнале? Какое устройство вы используете для тестирования? На что установлен min / target SDK?
0

Это старый пост, но он может помочь кому-то.

Если вам просто нужно подобрать контакт, вы можете использовать первый код сообщения без этой части:

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) + "]");
}
0

вы можете изменить свой код, который хотите получить номер телефона, как показано ниже:


  List numberList = new ArrayList();
        Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,contactId);
        Uri targetUri = Uri.withAppendedPath(baseUri,Contacts.Data.CONTENT_DIRECTORY);
        Cursor cursor = getContentResolver().query(targetUri,
                    new String[] {Phone.NUMBER},Data.MIMETYPE+"='"+Phone.CONTENT_ITEM_TYPE+"'",null, null);
        startManagingCursor(cursor);
        while(cursor.moveToNext()){
            numberList.add(cursor.getString(0));
        }
        cursor.close();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню