读取通话记录CallLog

注意:该方法的权限需要在Manifest中添加:
<uses-permission android:name="android.permission.READ_CONTACTS" > </uses-permission>
<uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"></uses-permission>
之后手动开启,如果需要添加运行时权限,去Demo中查看添加运行时权限

   private void readCallLogs() {
            outgoingList.clear();

    /*Query Call Log Content Provider*/
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    Activity#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for Activity#requestPermissions for more details.
            return;
        }
    }
    Cursor callLogCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);

    /*Check if cursor is not null*/
    if (callLogCursor != null) {

        /*Loop through the cursor*/
        while (callLogCursor.moveToNext()) {

            /*Get ID of call*/
            String id = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls._ID));

            /*Get Contact Name*/
            String name = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.CACHED_NAME));

            /*Get Contact Cache Number*/
            String cacheNumber = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.CACHED_NUMBER_LABEL));

            /*Get Contact Number*/
            String number = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.NUMBER));

            /*Get Date and time information*/
            long dateTimeMillis = callLogCursor.getLong(callLogCursor.getColumnIndex(CallLog.Calls.DATE));
            long durationMillis = callLogCursor.getLong(callLogCursor.getColumnIndex(CallLog.Calls.DURATION));

            /*Get Call Type*/
            int callType = callLogCursor.getInt(callLogCursor.getColumnIndex(CallLog.Calls.TYPE));

            String duration = durationMillis+""; //通话时间长度(秒)

            //时间戳转换
            SimpleDateFormat format =   new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
            String dateString = format.format(dateTimeMillis);// dateTimeMillis = 1365514019004;  通话时间(什么时候通话的)

            if (cacheNumber == null)
                cacheNumber = number;

            if (name == null)
                name = "No Name";

            /*Create Model Object*/
            //CallLogModel callLogModel = new CallLogModel(name, cacheNumber, duration, dateString);
            String callLogString = "姓名:"+name+",电话号码:"+cacheNumber+",通话时长"+duration+",通话时间:"+dateString;

            /*Add it into respective ArrayList*/
            if (callType == CallLog.Calls.OUTGOING_TYPE) {
                outgoingList.add("您拨打过:"+callLogString);
            } else if (callType == CallLog.Calls.INCOMING_TYPE) {
                outgoingList.add("您接听过:"+callLogString);
            } else if (callType == CallLog.Calls.MISSED_TYPE) {
                outgoingList.add("来电未接听:"+callLogString);
            }
        }
        /*Close the cursor*/
        callLogCursor.close();
    }
    Log.d("log1", "outgoingList:"+outgoingList);

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。