0

我有这种方法可以在我的收件箱中显示联系电话:

    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到联系人姓名?

理解这一点fetchContactNumbersfetchContactNames()保持一致很重要,这意味着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;
}
4

2 回答 2

0

您可以使用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;
}
于 2012-06-12T01:49:15.860 回答
0

是拼写错误吗?变量错误?

private String getDisplayName(String phoneNyumber) {

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

你的论点是有phoneNyumber并且你正在使用phoneNumber.

于 2012-06-12T04:53:38.337 回答