2012-06-12 2 views
0

У меня есть этот метод для просмотра контактных телефонов в своем почтовом ящике:Как изменить номер телефона, чтобы назвать Android?

public ArrayList<String> fetchInboxNumbers() { 

    ArrayList<String> sms = new ArrayList<String>(); 
    Uri uriSms = Uri.parse("content://sms/inbox"); 
    Cursor cursor = getContentResolver().query(uriSms, 
      new String[] { "_id", "address", "date", "body" }, null, null, null); 

    cursor.moveToFirst(); 
    while (cursor.moveToNext()) { 

     address = cursor.getString(1); // Displays phone number 


     Log.d("CONTACT", address); 
     sms.add(address); // + " " + body 
    } 

    Log.d("NAMES IN CALLLOG", sms.get(7)); 

    return sms; 
} // END FETCHINBOX 

То, что я пытаюсь сделать, это изменить String address его имя контакта.

От fetchContactNumbers() и 'fetchContactNames() , how can I change Адрес' до контактного лица?

Его важно понять, что fetchContactNumbers и fetchContactNames() выровнены, что означает, что контактное имя fetchContactNumbers().get(5) является fetchContactNames(). Get (5) `.

В конце концов, fetchInboxNumbers() заполняет пользовательский адаптер.

Этот метод возвращает список всех имен контактов:

public ArrayList<String> fetchContactNames() { 

    ArrayList<String> names = new ArrayList<String>(); 
    Cursor phones = getContentResolver().query(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
      null, null); 
    while (phones.moveToNext()) { 

     String name = phones 
       .getString(phones 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     names.add(name); 
    } 
    phones.close(); 

    return names; 
} 

И этот метод перечисляет все телефонные номера:

public ArrayList<String> fetchContactNumbers() { 

    ArrayList<String> numbers = new ArrayList<String>(); 
    Cursor phones = getContentResolver().query(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
      null, null); 
    while (phones.moveToNext()) { 
     String phoneNumber = phones 
       .getString(phones 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

     numbers.add(phoneNumber); 
    } 
    phones.close(); 

    return numbers; 
} 

ответ

1

Вы можете использовать CONTENT_FILTER_URI, чтобы получить отображаемое имя, вместо того, чтобы получать все имена и номера отдельно, что-то вроде ниже:

public ArrayList<String> fetchInboxNumbers() { 
    String displayName = ""; 
    ArrayList<String> sms = new ArrayList<String>(); 
    Uri uriSms = Uri.parse("content://sms/inbox"); 
    Cursor cursor = getContentResolver().query(uriSms, 
     new String[] { "_id", "address", "date", "body" }, null, null, null); 

    cursor.moveToFirst(); 
    while (cursor.moveToNext()) { 
     address = cursor.getString(1); // Displays phone number 
     displayName = getDisplayName(address); 
     sms.add(displayName); // + " " + body 
    } 
    return sms; 
} // END FETCHINBOX 

private String getDisplayName(String phoneNumber) { 
    String displayName = ""; 
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,  Uri.encode(phoneNumber)); 
    Cursor cursor = context.getContentResolver().query(uri, new String[] { Phone._ID, Phone.DISPLAY_NAME}, null, null, null); 

    if (cursor.moveToFirst()) { 

     displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 
    } 
    return displayName; 
} 
+0

Это очень интересно, но как бы применить это в моем fetchInboxNumbers()? – SpicyWeenie

+0

Не знаю, зачем вам нужен метод 'fetchInboxNumbers', потому что у вас уже есть номер из' smsuri'. Итак, все, что вам нужно, это написать метод, который принимает параметр «номер телефона» в качестве параметра и возвращает «displayName», как описано выше. – Chandra

+0

fetchInboxNumbers получает список контактов, который отправил мне SMS-сообщение. Если я смогу реализовать свой метод выше, он должен превратить все телефонные номера в мой почтовый ящик в имена контактов. Проблема, которую я вижу, заменяет новые String [] {"_id", "address", "date", "body"} из моего метода с новым String [] {Phone._ID, Phone.DISPLAY_NAME} – SpicyWeenie

0

Это орфографическая ошибка? переменная ошибка?

private String getDisplayName(String phoneNyumber) { 

    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup. 
          CONTENT_FILTER_URI,  Uri.encode(phoneNumber)); 
    ..... 
    } 

Ваш аргумент, имеющий phoneNyumber и вы используете phoneNumber.

+0

Yup. Это орфографическая ошибка. Благодарю. – Chandra

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