uniapp 安卓獲取通話記錄

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
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章