async readCallLogs() { //通話記錄
// #ifdef APP-PLUS
return await new Promise((resolve, reject) => {
if (plus.os.name != 'Android') {
resolve(null);
return;
}
try {
// 獲取通話記錄的主體代碼 順序不能夠亂
var CallLog = plus.android.importClass('android.provider.CallLog');
var Activity = plus.android.runtimeMainActivity();
var ContentResolver = plus.android.importClass('android.content.ContentResolver');
var resolver = Activity.getContentResolver();
plus.android.importClass(resolver);
var String = plus.android.importClass('java.lang.String');
var cs = resolver.query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls
.DEFAULT_SORT_ORDER);
plus.android.importClass(cs);
var content = [];
var count = 0; // 記錄多少條
if (cs.moveToFirst()) {
while (cs.moveToNext()) {
count++;
//號碼
var number = cs.getString(cs.getColumnIndex(CallLog.Calls.NUMBER));
//呼叫類型
var type;
switch (parseInt(cs.getString(cs.getColumnIndex(CallLog.Calls.TYPE)))) {
// 判斷通話類型
case CallLog.Calls.INCOMING_TYPE:
type = '呼入';
break;
case CallLog.Calls.OUTGOING_TYPE:
type = '呼出';
break;
case CallLog.Calls.MISSED_TYPE:
type = '未接';
break;
default:
type = '掛斷';
break;
}
// 獲取時間
var date = new Date(parseInt(cs.getString(cs.getColumnIndexOrThrow(CallLog.Calls
.DATE))));
// 聯繫人
var Name_Col = cs.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME);
var name = cs.getString(Name_Col);
//通話時間,單位:s
var Duration_Col = cs.getColumnIndexOrThrow(CallLog.Calls.DURATION);
var duration = cs.getString(Duration_Col);
// 存入數組
content.push({
name: name, // 聯繫人的姓名
mobile: number, // 聯繫人電話
// callTime: formatDate(date), // 呼入或呼出時間
callTime: date, // 呼入或呼出時間
talkTime: duration, // 通話時長
type: type
});
// 查詢200條 就跳出
if (count > 50) {
break;
}
}
}
resolve(content);
} catch (e) {
resolve(null);
console.error(e);
}
});
// #endif
}
async needPermission() { //需要的授權
// #ifdef APP-PLUS
if (plus.os.name != 'Android') {
return;
}
return await new Promise((resolve, reject) => {
plus.android.requestPermissions(
['android.permission.READ_CALL_LOG', 'android.permission.WRITE_CALL_LOG',
'android.permission.READ_SMS'
],
function(e) {
if (e.deniedAlways.length > 0) {
resolve(false);
return;
}
if (e.deniedPresent.length > 0) {
resolve(false);
return;
}
resolve(true);
return;
},
function(e) {
resolve(false);
}
);
});
// #endif
}