gpt4 book ai didi

java - 如何从 android (CallLog.Calls.CONTENT_URI) 表中获取联系人姓名?

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:50 28 4
gpt4 key购买 nike

我是 android 的新手,正在开发一个需要所有拨出通话记录、号码、通话时长和联系人姓名的应用程序。所以我的问题是,我能否获取 Android 系统的 CallLog.Calls.CONTENT_URI 表的呼出电话的名称和号码,或者我需要从单独的表中读取并映射它。下面是我的代码。提前致谢。

private String getCallDetails() {        StringBuffer sb = new StringBuffer();        // Cursor managedCursor =        // getContentResolver().query(CallLog.Calls.CONTENT_URI, null,        // null, null, null);        Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.DATE + ">?",                new String[] { String.valueOf("1451586601000") }, CallLog.Calls.NUMBER + " asc");        int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);        int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);        int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);        int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);        int name = managedCursor.getColumnIndex(CallLog.Calls.CACHED_NAME);        // int geoCodeColumn =        // managedCursor.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION);        // sb.append("Call Details :");        while (managedCursor.moveToNext()) {            String phNumber = managedCursor.getString(number);            String callType = managedCursor.getString(type);            String callDate = managedCursor.getString(date);            String callerName = managedCursor.getString(name);            // long calldate_timeStamp= Long.parseLong(callDate);            // long temp_time = 1451586601000L;            // if(calldate_timeStamp>temp_time){            // String geoCode = managedCursor.getString(geoCodeColumn);            Date callDayTime = new Date(Long.valueOf(callDate));            String callDuration = managedCursor.getString(duration);            String dir = null;            int dircode = Integer.parseInt(callType);            switch (dircode) {            case CallLog.Calls.OUTGOING_TYPE:                dir = "OUTGOING";                int total_call_duration = Integer.parseInt(callDuration);                total_time = total_time + total_call_duration;                MyContact dialedContact = new MyContact();                dialedContact.setPhoneNumber(Long.parseLong(phNumber));                dialedContact.setCallDuration(Integer.parseInt(callDuration));                // dialedContact.se                 sb.append("\nPhone Number:--- " + phNumber + " \nCallType:--- "                 + dir + " \nCall Date:--- " + callDayTime                 + " \nCall duration in sec :--- " + callDuration+ " \nGeocode: " );                 sb.append("\n----------------------------------");                break;            case CallLog.Calls.INCOMING_TYPE:                dir = "INCOMING";                break;            case CallLog.Calls.MISSED_TYPE:                dir = "MISSED";                break;            }        }        // }        managedCursor.close();    //  sb.append("" + total_time / 60);// call duration in minute        return sb.toString();    }

最佳答案

您需要:

1) 权限

将读取联系人数据的权限添加到您的应用程序 list 。

2) 调用联系人选择器

在您的 Activity 中,创建一个 Intent,要求系统从 Contacts URI 中的项目中找到一个可以执行 PICK 操作的 Activity。

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);调用 startActivityForResult,传入此 Intent(以及一个请求代码整数,在此示例中为 PICK_CONTACT)。这将导致 Android 启动一个注册为支持 People.CONTENT_URI 上的 ACTION_PICK 的 Activity,然后在做出(或取消)选择时返回到此 Activity。

startActivityForResult(intent, PICK_CONTACT);

3) 倾听结果

同样在您的 Activity 中,覆盖 onActivityResult 方法以监听您在第 2 步中启动的“选择联系人”Activity 的返回。您应该检查返回的请求代码是否与您期望的值匹配,并且结果代码为 RESULT_OK。

您可以通过对数据 Intent 参数调用 getData() 来获取所选联系人的 URI。要获取所选联系人的姓名,您需要使用该 URI 创建新查询并从返回的游标中提取姓名。

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = getContentResolver().query(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// TODO Whatever you want to do with the selected contact name.
}
}
break;
}
}

关于java - 如何从 android (CallLog.Calls.CONTENT_URI) 表中获取联系人姓名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061042/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com