android 获取系统通话记录
来源:互联网 发布:u盘坏了找回数据多少钱 编辑:程序博客网 时间:2024/06/06 16:31
在manifest添加以下权限
<uses-permission android:name="android.permission.READ_CALL_LOG" /><uses-permission android:name="android.permission.READ_CONTACTS" />
/** * 利用系统CallLog获取通话历史记录 * @param activity * @param num 要读取记录的数量 * @return */ public void getCallHistoryList(Activity activity, int num) { Cursor cs; if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CALL_LOG}, 1000); } cs = activity.getContentResolver().query(CallLog.Calls.CONTENT_URI, //系统方式获取通讯录存储地址 new String[]{ CallLog.Calls.CACHED_NAME, //姓名 CallLog.Calls.NUMBER, //号码 CallLog.Calls.TYPE, //呼入/呼出(2)/未接 CallLog.Calls.DATE, //拨打时间 CallLog.Calls.DURATION, //通话时长 }, null, null, CallLog.Calls.DEFAULT_SORT_ORDER); int i = 0; if (cs != null && cs.getCount() > 0) { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date_today = simpleDateFormat.format(date); for (cs.moveToFirst(); (!cs.isAfterLast()) && i < num; cs.moveToNext(), i++) { String callName = cs.getString(0); //名称 String callNumber = cs.getString(1); //号码 //如果名字为空,在通讯录查询一次有没有对应联系人 if (callName == null || callName.equals("")){ String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME}; //设置查询条件 String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + "='"+callNumber+"'"; Cursor cursor = getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, cols, selection, null, null); int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME); if (cursor.getCount()>0){ cursor.moveToFirst(); callName = cursor.getString(nameFieldColumnIndex); } cursor.close(); } //通话类型 int callType = Integer.parseInt(cs.getString(2)); String callTypeStr = ""; switch (callType) { case CallLog.Calls.INCOMING_TYPE: callTypeStr = CallLogInfo.CALLIN; break; case CallLog.Calls.OUTGOING_TYPE: callTypeStr = CallLogInfo.CALLOUT; break; case CallLog.Calls.MISSED_TYPE: callTypeStr = CallLogInfo.CAllMISS; break; default: //其他类型的,例如新增号码等记录不算进通话记录里,直接跳过 Log.i("ssss",""+callType); i--; continue; } //拨打时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date callDate = new Date(Long.parseLong(cs.getString(3))); String callDateStr = sdf.format(callDate); if (callDateStr.equals(date_today)) { //判断是否为今天 sdf = new SimpleDateFormat("HH:mm"); callDateStr = sdf.format(callDate); } else if (date_today.contains(callDateStr.substring(0, 7))) { //判断是否为当月 sdf = new SimpleDateFormat("dd"); int callDay = Integer.valueOf(sdf.format(callDate)); int day = Integer.valueOf(sdf.format(date)); if (day - callDay == 1) { callDateStr = "昨天"; } else { sdf = new SimpleDateFormat("MM-dd"); callDateStr = sdf.format(callDate); } } else if (date_today.contains(callDateStr.substring(0, 4))) { //判断是否为当年 sdf = new SimpleDateFormat("MM-dd"); callDateStr = sdf.format(callDate); } //通话时长 int callDuration = Integer.parseInt(cs.getString(4)); int min = callDuration / 60; int sec = callDuration % 60; String callDurationStr = ""; if (sec > 0) { if (min > 0) { callDurationStr = min + "分" + sec + "秒"; } else { callDurationStr = sec + "秒"; } } /** * callName 名字 * callNumber 号码 * callTypeStr 通话类型 * callDateStr 通话日期 * callDurationStr 通话时长 * 请在此处执行相关UI或存储操作,之后会查询下一条通话记录 */ Log.i("Msg","callName"+callName); Log.i("Msg","callNumber"+callNumber); Log.i("Msg","callTypeStr"+callTypeStr); Log.i("Msg","callDateStr"+callDateStr); Log.i("Msg","callDurationStr"+callDurationStr); } } }
阅读全文
0 0
- android 获取系统通话记录
- 获取android系统通话记录CallLog
- android中获取通话记录
- Android 获取通话记录
- Android获取通话记录
- Android获取手机通话记录
- Android获取本地通话记录
- Android获取通话记录
- Android获取通话记录
- Android通过ContentProvider获取通话记录
- Android开发之获取通话记录
- 获取通话记录
- Android开发之获取手机通话记录
- Android获取手机短信和通话记录及通讯录
- Android通讯录管理二之通话记录获取
- Android ContentResolver CallLog 获取手机通话记录
- Android 获取通话记录(按时间排序)
- Android中异步获取通话记录方法(Loader)
- 数据库事务四种隔离级别
- Qt5.9.1 qmake 中文手册(二)
- leetcode
- Effective STL 28 How to use a reverse_iterator's base iterator
- Servlet小总结。
- android 获取系统通话记录
- CGI
- es6 扩展运算符 三个点(...)
- CS架构和BS架构的区别
- H5 常见问题汇总及解决方法
- 解决第一次连接MySQL连不上和连接速度慢
- meta标签的功能
- Mybatis的详细配置
- Multiply