1

Вот код, который используется, чтобы получить контактную информацию:Android Контакты Content Provider иногда возвращает пустые телефонные номера

String id = data.getData().getLastPathSegment(); 
Cursor cursor = getActivity().getContentResolver() 
        .query(ContactsContract.Data.CONTENT_URI, 
         new String[] {ContactsContract.Data.DISPLAY_NAME}, 
            ContactsContract.Data.CONTACT_ID + "=?", 
            new String[]{id}, 
            null); 

// short circuit if we didn't pick a contact 
    if (cursor.getCount() == 0) { 
     return; 
    } 

    String contact = ""; 
    String contactName = ""; 

//code to get contact name 
    if (cursor.moveToFirst() && cursor.getString(0) != null) {  
      contact = contact + cursor.getString(0) + ","; 
      contactName = cursor.getString(0); 
      } 
    else { 
      contact = contact + ","; //changed 
      } 
    cursor.close(); 

// code to get phone number 
    cursor = getActivity().getContentResolver().query(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI,     
     newString[{ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.TYPE}, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", 
      new String[]{id},null); 

     if (cursor.moveToFirst() && cursor.getString(0) != null) { 
      contact = contact + cursor.getString(0) + ","; 
      contact = contact + cursor.getString(0) + ","; 
     } 
     else { 
      contact = contact + ",,"; //changed 
      } 
     cursor.close(); 

//Code to get email 
    cursor = getActivity().getContentResolver() 
      .query(
      ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
      new String[]{ContactsContract.CommonDataKinds.Email.ADDRESS}, 
      ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=?", 
      new String[]{id},null); 

    if (cursor.moveToFirst() && cursor.getString(0) != null) {   
      contact = contact + cursor.getString(0); 
    } 
    cursor.close(); 

    contact = contact.replace("+", ""); 
    Log.i("TAG", "CONTACT INFO = " + contact); 

То, что я пытаюсь сделать:

Здесь я запрос об контакт имя, номер телефона и адрес электронной почты из контактов через поставщика контента и объединить все три в одну строку с запятыми, разделяющими их внутри строки ,

Проблема:

Я получаю имя контакта и адрес электронной почты, без каких-либо проблем. Однако, когда я выбираю некоторые контакты от контакта, номер телефона, возвращенного пустым.

Контакты, которые возвращают пустые телефонные номера, - это номера телефонов из другой страны, из моего текущего местоположения.

Я сейчас в Канаде, и когда я выбираю канадские контакты, я правильно получаю номер телефона.

Однако, когда я выбираю номера телефонов из Индии, число не возвращается, вместо этого я получаю пустой результат.

То же самое происходит, когда я выбираю Контакт с цифрами типа «12345» или «5555555555» и т. Д.

Мой вопрос

Может быть, что Android пытается проверить подлинность числа и возвращает пустой номер, если он находит номер телефона Invalid? * (, вероятно, нет! Должно быть, моя ошибка!) *

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

Приносим извинения за любые недвусмысленности в коде или моем вопросе. Я начинающий программист и очень благодарен всем вашим материалам!

ответ

2

Одна вещь, которую я наблюдал из этого кода, вы читаете контакты с с использованием

ContactsContract.Contacts.CONTENT_URI 

Я Модифицированный код и создал новый метод для печати всех контактов.

public static void fetchContacts(Context context) { 

    String phoneNumber = null; 
    Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
    String _ID = ContactsContract.Contacts._ID; 
    String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; 
    String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER; 
    Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; 
    String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER; 
    StringBuffer output = new StringBuffer(); 
    ContentResolver contentResolver = context.getContentResolver(); 
    Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null); 

    if (cursor.getCount() > 0) { 

     while (cursor.moveToNext()) { 

      String contact_id = cursor.getString(cursor.getColumnIndex(_ID)); 
      String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME)); 
      long hasPhoneNumber = Long.parseLong(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER))); 

      if (hasPhoneNumber > 0) { 
       output.append("\n Name:" + name); 
       Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null); 

      while (phoneCursor.moveToNext()) { 
       phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)); 
       output.append("\n Number:" + phoneNumber); 
       System.out.println("Number:::::"+phoneNumber); 
       System.out.println("Contact:::::"+output.toString()); 
      } 
       phoneCursor.close(); 
      } 
     } 
    }else{ 
//   Toast.makeText(context, "No contacts Found", Toast.LENGTH_LONG).show(); 
     } 

    } 
+0

Я пытаюсь запустить код. Однако я не мог понять 'Util.formatMobileNumber()'. Из какой библиотеки является Util? – rgv

+0

Игнорируйте этот Util.formatMobileNumber(), который я использовал для форматирования мобильных номеров с длиной <8. Я отредактировал свой ответ, вы можете проверить сейчас –

+0

Работает ли это? У меня почти такая же проблема. Не могли бы вы мне помочь? –