如何在安卓系统中获取最近通话列表和收藏夹列表?

7

我需要在点击相应按钮时调用最近通话列表和收藏通话列表,并需要将数据放在自己的列表布局中。我是Android新手,对此感到很困惑。有人可以帮忙吗?提前感谢。

3个回答

8

使用以下有用的额外代码:

获取常用联系人:

Map getFavoriteContacts(){
Map contactMap = new HashMap();

Uri queryUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = new String[] {
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.Contacts.STARRED};

String selection =ContactsContract.Contacts.STARRED + "='1'";

Cursor cursor = getContentResolver().query(queryUri, projection, selection,null,null);


while (cursor.moveToNext()) {
    String contactID = cursor.getString(cursor
            .getColumnIndex(ContactsContract.Contacts._ID));

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactID));
    intent.setData(uri);
    String intentUriString = intent.toUri(0);

    String title = (cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));

    contactMap.put(title,intentUriString);

}
cursor.close();
return contactMap;
}

获取最近联系人:

Map getRecentContacts(){
Map contactMap = new HashMap();

Uri queryUri = android.provider.CallLog.Calls.CONTENT_URI;

String[] projection = new String[] {
        ContactsContract.Contacts._ID,
        CallLog.Calls._ID,
        CallLog.Calls.NUMBER,
        CallLog.Calls.CACHED_NAME,
        CallLog.Calls.DATE};

String sortOrder = String.format("%s limit 500 ", CallLog.Calls.DATE + " DESC");


Cursor cursor = getContentResolver().query(queryUri, projection, null,null,sortOrder);


while (cursor.moveToNext()) {
    String phoneNumber = cursor.getString(cursor
            .getColumnIndex(CallLog.Calls.NUMBER));

    String title = (cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)));

    if(phoneNumber==null||title==null)continue;

    String uri = "tel:" + phoneNumber ;
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse(uri));
    String intentUriString = intent.toUri(0);

    contactMap.put(title,intentUriString);

}
cursor.close();
return contactMap;
}

5
要获取最近的通话列表,您可以在Android中使用CallLog。这是一个很好的教程链接:这里。还有一个视频教程也很有用:这个链接
您可以像这样使用它来获取所有呼出电话:
Cursor cursor = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null, android.provider.CallLog.Calls.TYPE+"="+android.provider.CallLog.Calls.OUTGOING_TYPE, null,null);

对于所有类型的调用,使用方法如下:

Cursor cursor = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null, null, null,null);

你好Hiral,我正在使用相同的查询来获取所有通话日志类型,但是当涉及到双卡设备时,我遇到了一个小问题。我的代码在双卡设备上无法正常工作。你能否请友善地帮助我解决这个问题? - Scorpion

0
您可以使用以下Java代码获取最近的通话列表:
Cursor phones = getActivity().getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null,null);

while (phones.moveToNext()) {
    String phoneNumber = phones.getString(phones.getColumnIndex(CallLog.Calls.NUMBER));

    if (phoneNumber.length() > 6) {
        String name = phones.getString(phones.getColumnIndex(CallLog.Calls.CACHED_NAME));

        numbers.add(phoneNumber);

    }
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接