Android6.0的通话记录获取
来源:互联网 发布:淘宝自拍照布灯 编辑:程序博客网 时间:2024/04/29 20:03
接着上次通讯录获取,继续实现Android6.0的通话记录获取
1、在MainActivity的layout中添加一个button用于获取通话记录功能
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取通讯录信息" android:id="@+id/btnGetCallLog" android:layout_below="@+id/btnGetContacts" android:layout_alignParentStart="true" android:layout_alignEnd="@+id/btnGetContacts"/>
2、新建一个包CallLog用于存放获取通话记录所需的类。并在包中新建一个Activity:GetCallLog,实现通话记录获取的基本功能。由于上一篇博客已经将权限申请封装好了,所以直接在onCreate函数中调用就可以了。
private static List<CallLogInfo> callLogList = new ArrayList<CallLogInfo>(); private static final String CALLLOG_PERMISSION = android.Manifest.permission.READ_CALL_LOG; private static final int readCallLogRequest = 2;public static String getCallLog() { String[] projection = {CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER, CallLog.Calls.TYPE,CallLog.Calls.DURATION,CallLog.Calls.DATE}; try { Uri callLogUri = CallLog.Calls.CONTENT_URI; Cursor cursor = MyApplication.getContext().getContentResolver().query(callLogUri,projection,null,null,CallLog.Calls.DEFAULT_SORT_ORDER); String callLogName; String callLogNumber; String callLogDate; int callLogType; int callLogTime; String type; String time; while (cursor.moveToNext()){ callLogName = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); if (callLogName==null){ callLogName = "未知号码"; } callLogNumber = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); callLogDate = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE)); SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date d = new Date(Long.parseLong(callLogDate)); callLogDate = DateFormat.format(d); callLogType =cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); if (callLogType == 1){ type ="来电"; }else if (callLogType ==2){ type = "拨出"; }else type = "未接"; callLogTime = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)); if (type =="未接"){ time ="未接"; }else { time = timeChange(callLogTime); } CallLogInfo callLogInfo = new CallLogInfo(callLogName,callLogNumber ,callLogDate,callLogType,time); callLogList.add(callLogInfo); // Log.d("输出",callLogDate + callLogName + callLogNumber + callLogTime + callLogType); } cursor.close(); }catch (Exception e){ e.printStackTrace(); } return null; }
3、在这里还是要数据封装
public class CallLogInfo { private String name; private String number; private String date; private int type; // 来电:1,拨出:2,未接:3 private String time; //通话时长 public CallLogInfo(String name,String number,String date,int type,String time){ setName(name); setNumber(number); setType(type); setTime(time); setDate(date); }
4、为了让通话持续时间显得更人性化,实现了一个将秒转换为时分秒的方法:
private static String timeChange(int time){ int h = 0; int m = 0; int s = 0; int temp = time % 3600; if (time >3600){ h = time/3600; if(temp!=0){ if (temp>60){ m = temp/60; if (temp%60!= 0 ){ s = temp/60; } }else { s = temp; } } }else { m = time/60; if(time%60!=0){ s = time%60; } } return "通话时长:"+ h +"时" + m +"分" + s + "秒"; }
5、添加自定义的适配器来显示ListView
public class CallLogAdapter extends BaseAdapter { private List<CallLogInfo> list; private Context context; public CallLogAdapter(List<CallLogInfo> list,Context context){ this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; CallLogInfo callLog = list.get(position); if (convertView ==null){ convertView = LayoutInflater.from(context).inflate(R.layout.calllog,null); holder = new ViewHolder(); holder.call_type = (ImageView) convertView.findViewById(R.id.call_type); holder.name = (TextView) convertView.findViewById(R.id.call_name); holder.number = (TextView) convertView.findViewById(R.id.call_number); holder.date = (TextView) convertView.findViewById(R.id.call_date); holder.time = (TextView) convertView.findViewById(R.id.call_time); setType(callLog.getType(),holder); holder.name.setText(callLog.getName()); holder.number.setText(callLog.getNumber()); holder.date.setText(callLog.getDate()); holder.time.setText(callLog.getTime()); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); setType(callLog.getType(),holder); holder.name.setText(callLog.getName()); holder.number.setText(callLog.getNumber()); holder.date.setText(callLog.getDate()); holder.time.setText(callLog.getTime()); } return convertView; } private static class ViewHolder{ ImageView call_type; TextView name; TextView number; TextView date; TextView time; } private void setType(int callLog,ViewHolder holder){ switch (callLog) { case 1: holder.call_type.setBackgroundResource(R.drawable.laidian); break; case 2: holder.call_type.setBackgroundResource(R.drawable.bochu); break; case 3: holder.call_type.setBackgroundResource(R.drawable.weijie); break; } }}
6、清理缓存别忘记了
@Override public void onBackPressed() { //清除缓存 callLogList.clear(); super.onBackPressed(); }
7、绑定listview和adapter
CallLogLv = (ListView) findViewById(R.id.CallLogLv); adapter = new CallLogAdapter(callLogList, this); CallLogLv.setAdapter(adapter);
8、大功告成了,界面还可以设计的好看一点,我这里只是为了方便展示数据,所以界面弄的很简单
0 0
- Android6.0的通话记录获取
- Android6.0读取通话记录
- Android6.0的通讯录获取
- 获取通话记录
- 关于获取Android6.0的MAC地址
- Android6.0短信获取
- android6.0获取OTG
- Android6.0权限获取
- Android6.0动态获取权限
- android6.0动态获取权限
- android6.0获取wlan Mac
- android6.0获取通讯录权限
- android6.0动态获取权限
- Android6.0动态获取权限
- Android6.0 获取MAC地址
- Android6.0系统MAC地址获取的方法
- Android6.0以后,如何获取当前运行的app
- 关于android6.0用ContentProvider获取联系人的一些问题
- shiro处理两种路径进行登陆问题
- js base64加密
- SDUT-2170-The Largest SCC(强连通分量)
- 论函数调用约定
- 【数据库】视图 存储过程 触发器 事物
- Android6.0的通话记录获取
- 第13周阅读程序——交通工具(1)
- ACM头文件
- Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
- css中 除了使用:hover 还有:after
- 大数类模板
- T-MVP:泛型深度解耦下的MVP大瘦身
- 理解Cookie和Session机制
- javamail发送邮件的简单实例