注意:该方法的权限需要在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);
}