- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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/
在how to retrieve the list of contacts in android我看到代码允许您使用 ContactsContract.CommonDataKinds.Phone.CO
Android 中 RawContacts.CONTENT_URI 和 ContactsContract.Contacts.CONTENT_URI 有什么区别? 我正在尝试编写一个服务来监听 nati
我正在查看来自 Android docs 的以下代码 fragment . // Query for all people contacts using the Contacts.People con
我一直在尽我所能研究内容提供商,但我无法理解安装在手机上的其他应用程序如何访问我提供的内容的概念。其他应用怎么可能知道我的 CONTENT_URI 是什么??? 我正在制作一个联系人应用程序。其他应用
据我了解,Content Provider 是一种访问数据库内容的方式。 要访问数据库,需要权限部分。此权限部分由 CONTENT_URI 提供。因此,Content_URI 是一种授予数据库权限的方
我正在尝试更新现有联系人的显示名称和电子邮件 ID,我可以更新电子邮件地址,但显示名称没有更新,我使用的代码在这里。我已经尝试了很多更多的代码,但没有任何东西对我有用,请帮忙。 Cursor curs
我正在尝试按帐户类型从我的原始联系人中检索电话号码。使用下面的代码段, String SELECTION = ContactsContract.RawContacts.ACCO
我正在尝试查询 SMS 线程表,但我似乎没有使用正确的 URI。 查询 URI“content://sms/conversations”给我以下列: [thread_id, msg_count, sn
这两个 Contacts.CONTENT_FILTER_URI 和Android 中的 Contacts.CONTENT_URI? 最佳答案 您尝试过在线查找吗?在这里解释:http://develo
各位机器人开发者大家好!请你帮忙解答一个问题。我在努力 Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,CONTACT_
我是 android 的新手,正在开发一个需要所有拨出通话记录、号码、通话时长和联系人姓名的应用程序。所以我的问题是,我能否获取 Android 系统的 CallLog.Calls.CONTENT_U
因为我的应用程序使用来自 android.provider.ContactsContract.Data (API > 11) 和 ContactsContract.Contacts.CONTENT_U
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
public class MainActivity extends Activity { Button b; //FrameLayout fl; @Override p
你好下面的代码进入联系编辑页面在所有设备上都可以正常工作,但在某些设备上不起作用。请帮我。 Intent intent1 = new Intent(Intent.ACTION_EDIT, Con
我是一名优秀的程序员,十分优秀!