android 读取手机通话记录
2017-08-31 16:58
260 查看
import android.Manifest; import android.app.Activity; import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.CallLog; import android.support.v4.app.ActivityCompat; import com.feilu.flashloan.callback.OnCallLogListener; import com.feilu.flashloan.ui.usercenter.bean.CallLogBean; import com.google.gson.Gson; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by fengpeihao on 2017/8/23. * 读取手机通话记录工具类 */ public class CallLogUtils { private static CallLogUtils mCallLogUtils; private OnCallLogListener mListener; public static CallLogUtils with() { if (mCallLogUtils == null) { synchronized (ContactUtils.class) { mCallLogUtils = new CallLogUtils(); } } return mCallLogUtils; } public void getCallLogs(Activity activity, OnCallLogListener listener) { mListener = listener; if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.R 4000 EAD_CALL_LOG) != PackageManager.PERMISSION_GRANTED) { if (mListener != null) mListener.onFailed(); return; } MyAsyncQueryhandler asyncQueryHandler = new MyAsyncQueryhandler(activity.getContentResolver()); Uri uri = CallLog.Calls.CONTENT_URI; String[] projection = {"name", "number", "type", "date", "duration"}; asyncQueryHandler.startQuery(0, null, uri, projection, null, null, CallLog.Calls.DEFAULT_SORT_ORDER); } private String getType(String type) { switch (type) { //呼入1/呼出2/未接3 case "1": return "呼入"; case "2": return "呼出"; case "3": return "未接"; default: return ""; } } private String getDate(String date) { Date callDate = new Date(Long.parseLong(date)); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(callDate); } private String getDuration(String duration) { int callDuration = NumberUtils.getInteger(duration); if (callDuration <= 0) return "00:00:00"; int h = callDuration / 3600; int m = callDuration % 3600 / 60; int s = callDuration % 60; String hour = h + ""; String min = m + ""; String sec = s + ""; if (h < 10) { hour = "0" + h; } if (m < 10) { min = "0" + m; } if (s < 10) { sec = "0" + s; } return hour + ":" + min + ":" + sec; } private class MyAsyncQueryhandler extends AsyncQueryHandler { public MyAsyncQueryhandler(ContentResolver cr) { super(cr); } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { List<CallLogBean> list = new ArrayList<>(); while (cursor.moveToNext()) { String callName = cursor.getString(cursor.getColumnIndex("name"));//姓名 String callNumber = cursor.getString(cursor.getColumnIndex("number"));//电话号码(在手机通讯录则有名字,不在则为null) String callType = cursor.getString(cursor.getColumnIndex("type"));//通话类型 1 呼入 2 呼出 3 未接 String date = getDate(cursor.getString(cursor.getColumnIndex("date")));//拨打时间 String duration = getDuration(cursor.getString(cursor.getColumnIndex("duration")));//通话时长 CallLogBean callLogBean = new CallLogBean(date, callNumber, callName, duration, callType); list.add(callLogBean); } Gson gson = new Gson(); mListener.onSuccess(gson.toJson(list)); } else { if (mListener != null) mListener.onFailed(); } super.onQueryComplete(token, cookie, cursor); } } }
public interface OnCallLogListener { void onSuccess(String json); void onFailed(); }
注:
需要权限
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
6.0以上版本需要动态申请权限
相关文章推荐
- android: 用ContentResolver读取自己应用的短信和手机通话记录(15)
- Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
- Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
- android中根据电话号码读取通话记录表
- Android实战—实现自动读取通讯录和通话记录切换,ViewPage滑屏效果,可拨打电话
- Android 6.0 通话记录生成保存和读取显示
- Android获取手机短信和通话记录及通讯录
- Android端通话记录读取
- Android开发之获取手机通话记录
- Android手机短信,通话记录和通讯录的相关操作
- 越狱的 ios 如何 获取 读取 提取 手机上的 短信 通话记录 联系人 等信息
- Android手机获取通话记录和短信记录
- android中读取联系人和通话记录
- Android获取手机通话记录的方法
- Android获取手机短信和通话记录及通讯录
- android读取联系人,短信,通话记录,IMSI
- Android获取手机通话记录
- 打补丁去掉Android手机的短信通话记录
- 在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱
- unity3d 在android手机内读取assets目录内的资源