阅读特定联系人的CallLog(带有联系人ID)

时间:2016-10-30 09:54:33

标签: java android android-cursor calllog

我必须在我的Android应用中为联系人显示“近期活动”。所以我需要读取该联系人的所有传入,传出和所有类型的呼叫。我需要使用Contact ID(ContactsContract.PhoneLookup._ID)。

我可以读取所有CallLog,然后搜索该列表中的特定ID,但速度非常慢。所以我认为我需要一个自定义Cursor来做到这一点。我试着写一个游标,但它现在不能正常工作。

cursor = getContentResolver().query(
    CallLog.Calls.CONTENT_URI,
    null,
    CallLog.Calls._ID+" = ?",
    new String[]{String.valueOf(148)},
    null);

1 个答案:

答案 0 :(得分:0)

以下是您需要的代码。

Cursor contact = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID + "=?", new String[]{String.valueOf(148)}, null, null);
    if (contact != null && contact.moveToNext()) {
        String lookupKey = contact.getString(contact.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
        int contactId = contact.getInt(contact.getColumnIndex(ContactsContract.Contacts._ID));
        Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);

        Cursor calls = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.CACHED_LOOKUP_URI + "=?", new String[]{contactUri.toString()}, CallLog.Calls.DATE + " DESC");
        while (calls.moveToNext()) {
            Log.d(TAG, "type: " + calls.getString(calls.getColumnIndex(CallLog.Calls.TYPE)) + ", number: " + calls.getString(calls.getColumnIndex(CallLog.Calls.NUMBER)) + ", " + "cached_name: " + calls.getString(calls.getColumnIndex(CallLog.Calls.CACHED_NAME)) + ", " + "date: " + calls.getString(calls.getColumnIndex(CallLog.Calls.DATE)));
        }
    }