Проблемы с выбором контакта с номером телефона, а не с чтением номера телефона - PullRequest
5 голосов
/ 20 ноября 2011

Вызов средства выбора контактов, показывающего все контакты, выполняется следующим образом (как указано здесь много раз на SO):

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

Я получаю имя контакта и все его номера телефонов в onActivityResult со следующим фрагментом:

public void onActivityResult( int requestCode, int resultCode, Intent intent )
{
    Uri contactUri = intent.getData();
    ContentResolver resolver = getContentResolver();
    long contactId = -1;

    // get display name from the contact
    Cursor cursor = resolver.query( contactUri,
                                    new String[] { Contacts._ID, Contacts.DISPLAY_NAME }, 
                                    null, null, null );
    if( cursor.moveToFirst() )
    {
        contactId = cursor.getLong( 0 );
        Log.i( "tag", "ContactID = " + Long.toString( contactId ) );
        Log.i( "tag", "DisplayName = " + cursor.getString( 1 ) );
    }

    // get all phone numbers with type from the contact
    cursor = resolver.query( Phone.CONTENT_URI,
                             new String[] { Phone.TYPE, Phone.NUMBER }, 
                             Phone.CONTACT_ID + "=" + contactId, null, null );
    while( cursor.moveToNext() )
    {
        Log.i( "tag", "PhoneNumber = T:" + Integer.toString( cursor.getInt( 0 ) ) + " / N:" + cursor.getString( 1 ) );
    }

Вызов сборщика контактов и отображение контактов только с номером телефона можно выполнить следующим образом (также можно найти в SO):

Intent intent = new Intent( Intent.ACTION_PICK );
intent.setType( ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE );
startActivityForResult( intent, REQ_CODE );

Если я это сделаю, я вижу только те контакты в средстве выбора контактов, у которых есть хотя бы один телефонный номер, и это именно то, что мне нужно. К сожалению, из приведенного выше фрагмента кода я получаю только отображаемое имя, но НЕ номера телефонов.

Кто-нибудь знает, что мне нужно изменить, чтобы получить телефонные номера?

Заранее спасибо

1 Ответ

2 голосов
/ 21 ноября 2011

Измените Phone.Contact_Id в предложении where для Phone._ID следующим образом:

   cursor = resolver.query( Phone.CONTENT_URI,
                             new String[] { Phone.TYPE, Phone.NUMBER }, 
                             Phone._ID + "=" + contactId, null, null );
    while( cursor.moveToNext() )
    {
        Log.i( "tag", "PhoneNumber = T:" + Integer.toString( cursor.getInt( 0 ) ) + " / N:" + cursor.getString( 1 ) );
    }

Подробнее в этом вопросе .

Надеюсь, это поможет)

...