1

Я следую этому примеру retrieve list of contacts для извлечения контактов с устройства Android. Он дает все контакты, которые включают контакты электронной почты и некоторые пустые контакты.Как получить только телефонные номера контактов с устройства Android

Я пробовал модифицировать ContactsContract как ContactsContract.Contacts.HAS_PHONE_NUMBER в проекции и выборе для получения мобильных контактов, но ничего не получилось.

String[] PROJECTION = {ContactsContract.Contacts._ID,ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID,
SORT_ORDER,ContactsContract.Contacts.HAS_PHONE_NUMBER};
 

Строка ВЫБОР = ContactsContract.Contacts.DISPLAY_NAME + "<> ''" + "И" ContactsContract.Contacts.IN_VISIBLE_GROUP + "= 1";

Любая идея получить только контакты с мобильными номерами?

+0

использование 'ContactsContract.CommonDataKinds.Phone.CONTENT_URI' – pskink

+0

@pskink я попытался прохождения Phone.CONTENT_URI в отборе, но дает непризнанные токены исключения. – Mukesh

+1

Почему у вас есть SORT_ORDER и HAS_PHONE_NUMBER в проекции? HAS_PHONE_NUMBER должен быть в выборе - поскольку вы, похоже, хотите выбрать на его основе. Используйте select = "HAS_PHONE_NUMBER = 1" и выполните соответствующий порядок сортировки в правильном параметре запроса. – RocketRandom

ответ

1

Вы можете использовать этот код, чтобы получить все имена контактов и номер

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
while (phones.moveToNext()) 
{ 
    String contactName=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

} 
phones.close(); 
+0

, это действительно работает там, где мы можем избежать контактов с электронной почтой, но 1.how сортировать по отображаемым именам в этом запросе 2. как устранить повторяющийся номер телефона – Mukesh

+0

Вы можете используйте класс Collections для выполнения сортировки и других операций –

0

Показывать только контакты с номером телефона и открытым список контактов умыслом:

Intent pickContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); // Uri.parse("content://contacts") 
// Show only user contacts with phone numbers 
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); // Show only user contacts with phone numbers 
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 

Получить номер телефона из ответа/контакта :

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_CONTACT_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      Uri contactUri = data.getData(); 
      String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER}; 

      Cursor cursor = getActivity().getContentResolver().query(contactUri, projection, null, null, null); 
      if (cursor == null) { 
       // show error msg 
       return; 
      } 
      cursor.moveToFirst(); 

      int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      if (column >= 0) { 
       String phoneNo = cursor.getString(column); 
       sendSmsMessage(phoneNo); 
      } else { 
       // show error msg 
      } 
      cursor.close(); 
     } 
    } 
} 

Убедитесь, что вы также выполняете разрешения во время выполнения в API 23+

android.permission.READ_CONTACTS 

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

  • Нет связанных вопросов^_^