获取通讯记录首先得获取通讯权限:
plus.android.requestPermissions([
'android.permission.READ_CALL_LOG',
'android.permission.WRITE_CALL_LOG',
'android.permission.CALL_PHONE'
], res => {
if (res.granted.length > 0) {
console.log('"已授权");
// this.getCallRecord(success=>{
// ...
// });
} else {
console.log('"请先授权!");
}
})
获取成功后再获取通讯记录列表:
// 查本地数据
getCallRecord({
num = 100,
column = null, // 需要返回参数列的名称,null返回所有列
selection = null, // 筛选条件
selectionVal = null, // 筛选条件的动态值,配合selection使用,可替换selection中的'?'
sortOrder = 'DESC', // 按日期升序ASC/降序DESC
success = function() {}
} = {}) {
uni.showLoading({
title: "获取通讯记录中...",
mask: true
});
// 创建实例
var CallLog = plus.android.importClass("android.provider.CallLog");
var main = plus.android.runtimeMainActivity();
var obj = main.getContentResolver();
plus.android.importClass(obj);
//查询
var sql = '';
var keyword = '';
for (let item of Object.keys(selection)) {
if (selection[item] != '') {
switch (item) {
case 'mobile':
sql = sql == '' ? sql : sql + ' and ';
sql = sql + CallLog.Calls.NUMBER + " like '%" + selection[item] + "%'";
keyword = selection[item];
break;
case 'startTime':
sql = sql == '' ? sql : sql + ' and ';
sql = sql + CallLog.Calls.DATE + '>=' + selection[item];
break;
case 'endTime':
sql = sql == '' ? sql : sql + ' and ';
sql = sql + CallLog.Calls.DATE + '<=' + selection[item];
break;
case 'type':
sql = sql == '' ? sql : sql + ' and ';
sql = sql + CallLog.Calls.TYPE + '=' + selection[item];
break;
}
}
}
sql = sql != '' ? sql : null;
var cursor = obj.query(CallLog.Calls.CONTENT_URI, column, sql, selectionVal, CallLog
.Calls.DATE + ' ' + sortOrder);
plus.android.importClass(cursor);
var content = []; // 用来存储数据
var count = 0; // 记录多少条
if (cursor.moveToFirst()) {
while (cursor.moveToNext()) {
count++;
//号码
var number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
//呼叫类型
var type, phone_type = parseInt(cursor.getString(cursor.getColumnIndex(CallLog
.Calls.TYPE)));
switch (phone_type)
// 判断通话类型
{
case CallLog.Calls.INCOMING_TYPE:
type = "呼入";
break;
case CallLog.Calls.OUTGOING_TYPE:
type = "呼出";
break;
case CallLog.Calls.MISSED_TYPE:
type = "未接";
break;
case CallLog.Calls.REJECTED_TYPE:
type = "拒接";
break;
default:
type = "其他";
break;
}
// 获取时间
// var date = new Date(parseInt(cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.DATE))));
var date = new Date(new Date(parseInt(cursor.getString(cursor
.getColumnIndexOrThrow(CallLog.Calls.DATE)))))
var formatDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date
.getDate() + ' ' + (date.getHours() > 9 ? date.getHours() : "0" + date
.getHours()) + ':' + (date.getMinutes() > 9 ? date.getMinutes() : "0" +
date.getMinutes()) + ':' + (date.getSeconds() > 9 ? date.getSeconds() :
"0" + date.getSeconds());
// 联系人
// var Name_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME);
// var name = cursor.getString(Name_Col);
// 号码归属地 返回:北京 联通
var numberLocation = cursor.getString(cursor.getColumnIndex(CallLog.Calls
.GEOCODED_LOCATION));
//通话时间,单位:s
var Duration_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.DURATION);
var duration = cursor.getString(Duration_Col);
// 存入数组
content.push({
// name: name, // 联系人的姓名
dial_phone: number, // 联系人电话
address: numberLocation, // 号码的归属地
create_time: formatDate, // 呼入或呼出时间
duration: duration, // 通话时长
phone_type: phone_type,
type: type,
keyword: keyword,
checked: false
});
// 查询num条就跳出
if (num > 0 && count >= num) {
break;
}
}
}
uni.hideLoading();
if (success) return success(content);
},