2013-11-30 2 views
0

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

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
//intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, PICK_CONTACT); //PICK_CONTACT is defined earlier as 1 

Это прекрасно работает, но включает в себя контакты из различных приложений, таких как электронные письма Facebook и т. Д. Если я раскомментировать

//intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 

Это показывает только те контакты, которые вы видите в приложении Контакты, но не возвращает номера телефонов. Любой способ исправить это?

У меня есть разрешение READ_CONTACTS.

код для чтения Uri контакта

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(reqCode, resultCode, data); 

    if(reqCode != PICK_CONTACT) return; 

    Cursor cur = getContentResolver().query(data.getData(), null, 
      null, null, null); 

    if (cur.getCount() <= 0) return; 
    while (cur.moveToNext()) 
    { 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
     { 
      // Query phone here. Covered next 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); 
      while (phones.moveToNext()) 
       //phone is the EditText view where the user enters a phone number 
       phone.setText(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 

      phones.close(); 
     } 

    } 

} 

ответ

0

но он не возвращает телефонных номеров

Если добавить READ_CONTACTS разрешение, вы можете запросить ContactsContract, либо представить весь список самостоятельно или запросить, чтобы получить номер телефона контакта, выбранного пользователем через ACTION_PICK.

Без READ_CONTACTS вы не имеете права на доступ к контактным телефонам любым способом, за исключением случаев, когда пользователь вводит одно в ваше приложение напрямую.

+0

Забыл упомянуть, что у меня есть разрешение READ_CONTACTS. Он по-прежнему возвращает номера телефонов контактов, должен ли я раскомментировать строку кода. – ADiabeticBadger

+0

@ADiabeticBadger: В вашем вопросе ваша проблема заключается в том, что 'ACTION_PICK' не возвращает номер телефона. В вашем комментарии ваша проблема в том, что он * * возвращает номер телефона. Что он? – CommonsWare

+0

Извините, у вас проблемы с вводом текста. Я имел в виду, что когда я раскомментирую строку кода, он показывает только контакты, которые вы увидите в приложении контактов, но он не вернет номер телефона даже с разрешением READ_CONTACTS. – ADiabeticBadger

Смежные вопросы