Android 获取通话记录
通话记录
一、申请权限
1.Manifest.xml 声明权限
二、获取通话记录
1.读取CallLog数据库
ContentResolver resolver = context.getContentResolver();
Cursor cursor = null;
String selection = getCallLogSelection(type);
String[] selectionArgs = getCallLogSelectionArgs(type, begin, end, simId);
try {
long start = System.currentTimeMillis();
cursor = resolver.query(
CallLog.Calls.CONTENT_URI,
null,
selection,
selectionArgs,
CallLog.Calls.DEFAULT_SORT_ORDER);
long finish = System.currentTimeMillis();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
begin 筛选开始时间 13位,毫秒数,响铃时间
end 筛选截止时间
type 记录长度,-1为所有,0为已接通的通话记录
simId sim卡的Id
2.根据cursor获取 JSONArray
public static JSONArray getJsonArray(Cursor cursor, int counts){
JSONArray resultSet = new JSONArray();
long start = System.currentTimeMillis();
int count = 0;
while (cursor != null && cursor.moveToNext() && count < counts) {
// 数据库字段,列数
int colsCount = cursor.getColumnCount();
// 每一行数据对象
JSONObject rowObject = new JSONObject();
for (int i = 0; i < colsCount; i++) {
if (!TextUtils.isEmpty(cursor.getColumnName(i))) {
try {
if (cursor.getString(i) != null) {
rowObject.put(cursor.getColumnName(i), cursor.getString(i));
} else {
rowObject.put(cursor.getColumnName(i), "");
}
} catch (Exception e) {
}
}
}
resultSet.put(rowObject);
count++;
}
return resultSet;
}
3.加工通话记录
自定义接收类
public class Record {
public String number; // 手机号
public String name; // 匹配通讯录的名称
public String date; // 通话日期
public String duration; // 通话时长,秒数
public String type; // 1 来电,2拨出,3未接
public String icc_id;
}
解析JsonArray
private static List<Record> getRecordsFromJSONArray(JSONArray resultSet){
List<Record> list = new Gson().fromJson(resultSet.toString(),
new TypeToken<List<Record>>(){}.getType());
return list;
}
总结
Android 10 测试,可以获取。