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 に答える