Выбор номера от пользователя с несколькими номерами при использовании средства выбора контактов - PullRequest
9 голосов
/ 30 мая 2011

Я пытаюсь разрешить пользователю выбирать номер телефона из контакта с помощью средства выбора контактов. Тем не менее, сейчас все примеры, которые я вижу в Интернете, показывают, как вы можете выбрать контакт, но я надеюсь, что появится второй экран, а затем у этого контакта будет несколько телефонных номеров, чтобы вы могли указать, какой из них вы хотите выбрать (способ это текстовое сообщение позволяет вам сделать это при выборе контакта).

У меня вопрос: нужно ли вам собрать все цифры и затем попросить пользователя выбрать номер, или эта функция уже встроена в Android? Я надеюсь, что просто забыл флаг или что-то в этом роде.

Ответы [ 4 ]

11 голосов
/ 05 июля 2011

Кроме того, вы можете сначала отобразить номера телефонов, связанные с каждым контактом, в окне выбора контактов и выбрать один из них. Запустите средство выбора контактов следующим образом (обратите внимание, что URI отличается от моего другого ответа):

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, REQUEST_PICK_CONTACT);

Затем в onActivityResult ():

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

// get the phone number id from the Uri
String id = result.getLastPathSegment();

// query the phone numbers for the selected phone number id
Cursor c = getContentResolver().query(
    Phone.CONTENT_URI, null,
    Phone._ID + "=?",
    new String[]{id}, null);

int phoneIdx = c.getColumnIndex(Phone.NUMBER);

if(c.getCount() == 1) { // contact has a single phone number
    // get the only phone number
    if(c.moveToFirst()) {
        phone = c.getString(phoneIdx);
        Log.v(TAG, "Got phone number: " + phone);

        loadContactInfo(phone); // do something with the phone number

    } else {
        Log.w(TAG, "No results");
    }
}
5 голосов
/ 05 июля 2011

Я смог сделать это, создав второй диалог, в котором отображаются все номера телефонов, связанные с контактом.Сначала вызовите это где-нибудь в вашем коде:

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

Затем в onActivityResult () используйте это, чтобы определить, имеет ли выбранный контакт несколько телефонных номеров, и отобразите диалоговое окно, если так:

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

// get the contact id from the Uri
String id = result.getLastPathSegment();

// query for phone numbers for the selected contact id
c = getContentResolver().query(
    Phone.CONTENT_URI, null,
    Phone.CONTACT_ID + "=?",
    new String[]{id}, null);

int phoneIdx = c.getColumnIndex(Phone.NUMBER);
int phoneType = c.getColumnIndex(Phone.TYPE);

if(c.getCount() > 1) { // contact has multiple phone numbers
    final CharSequence[] numbers = new CharSequence[c.getCount()];
    int i=0;
    if(c.moveToFirst()) {
        while(!c.isAfterLast()) { // for each phone number, add it to the numbers array
            String type = (String) Phone.getTypeLabel(this.getResources(), c.getInt(phoneType), ""); // insert a type string in front of the number
            String number = type + ": " + c.getString(phoneIdx);
            numbers[i++] = number;
            c.moveToNext();
        }
        // build and show a simple dialog that allows the user to select a number
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.select_contact_phone_number_and_type);
        builder.setItems(numbers, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int item) {
                String number = (String) numbers[item];
                int index = number.indexOf(":");
                number = number.substring(index + 2);
                loadContactInfo(number); // do something with the selected number
            }
        });
        AlertDialog alert = builder.create();
        alert.setOwnerActivity(this);
        alert.show();

    } else Log.w(TAG, "No results");
} else if(c.getCount() == 1) {
    // contact has a single phone number, so there's no need to display a second dialog
}

Я знаю, что это старый вопрос, но я надеюсь, что это поможет.

3 голосов
/ 05 декабря 2011

На всякий случай, если кто-то снова наткнется на это.

Другой альтернативой другим ответам является библиотека https://github.com/codinguser/android_contact_picker

Полное раскрытие информации: я являюсь автором этой библиотеки

0 голосов
/ 24 августа 2015

это просто объяснение по ссылке разработчиков Android: https://developer.android.com/training/contacts-provider/modify-data.html#InsertEdit

и простой код добавления:

String phoneNumber = "+01 123 456 789";
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.PHONE, phoneNumber);
if (intent.resolveActivity(getPackageManager()) != null) {
 startActivityForResult(intent, REQUEST_CODE_ADD_PHONE_CONTACT);
}

если вам нужен результат активности, вы должны прослушать событие onActivityResult на Activity byREQUEST_CODE_ADD_PHONE_CONTACT переменная.

...