0

私の使用例は単純です。標準の Android 電話アプリの最近の通話リスト ビューに似たリストビューを作成したいと考えています。

getContentResolvery().query() を使用して android.provider.CallLog.Calls で最近の呼び出しを照会できます...問題は、その連絡先がユーザーの連絡先リストに存在する場合、連絡先の画像も必要なことです...私はこれは CallLog.Calls から他のプロバイダー、おそらく ContactContract プロバイダーへの結合だと思いますか?

理想的には、この情報を 1 つのカーソルで受け取ります。

助けてくれてありがとう

4

1 に答える 1

2

連絡先 ID を使用して、連絡先の写真 URI を取得します。写真の URI を取得するには、次のコードを使用します。

import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;

public Uri getPhotoUri(long contactId) {
    ContentResolver contentResolver = getContentResolver();

    try {
        Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,null,ContactsContract.Data.CONTACT_ID+ "="+ contactId+ " AND "+ ContactsContract.Data.MIMETYPE+"='"+ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE+ "'", null, null);

        if (cursor != null) {
        if (!cursor.moveToFirst()) {
            return null; // no photo
        }
        } else {
        return null; // error in cursor process
        }

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    Uri person = ContentUris.withAppendedId(
        ContactsContract.Contacts.CONTENT_URI, contactId);
    return Uri.withAppendedPath(person,ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
  }

アップデート:

連絡先 ID は電話番号を使用して取得できます

import android.provider.ContactsContract.PhoneLookup;

public String fetchContactIdFromPhoneNumber(String phoneNumber) {
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));
    Cursor cursor = this.getContentResolver().query(uri,new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID },null, null, null);

    String contactId = "";

    if (cursor.moveToFirst()) {
        do {
        contactId = cursor.getString(cursor.getColumnIndex(PhoneLookup._ID));
        } while (cursor.moveToNext());
    }

    return contactId;
  }
于 2013-07-11T16:06:20.130 に答える