读取特定联系人的通话记录(带有联系人 ID)
Read CallLog for a Specific Contact (with contact ID)
我必须在我的 Android 应用程序中显示 "Recent Activity" 联系人。所以我需要读取该联系人的所有传入、传出和所有类型的呼叫。我需要使用 Contact ID(ContactsContract.PhoneLookup._ID).
来做到这一点
我可以读取所有呼叫日志,然后在该列表中搜索该特定 ID,但速度非常慢。所以我想我需要一个自定义 Cursor 来做到这一点。我试着写一个游标,但它现在不工作。
cursor = getContentResolver().query(
CallLog.Calls.CONTENT_URI,
null,
CallLog.Calls._ID+" = ?",
new String[]{String.valueOf(148)},
null);
这是您需要的代码。
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)));
}
}
我必须在我的 Android 应用程序中显示 "Recent Activity" 联系人。所以我需要读取该联系人的所有传入、传出和所有类型的呼叫。我需要使用 Contact ID(ContactsContract.PhoneLookup._ID).
来做到这一点我可以读取所有呼叫日志,然后在该列表中搜索该特定 ID,但速度非常慢。所以我想我需要一个自定义 Cursor 来做到这一点。我试着写一个游标,但它现在不工作。
cursor = getContentResolver().query(
CallLog.Calls.CONTENT_URI,
null,
CallLog.Calls._ID+" = ?",
new String[]{String.valueOf(148)},
null);
这是您需要的代码。
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)));
}
}