序言
由于个人项目需求,需要直接在app中拨号给对应手机号的用户,所以查询资料封装了该组件
配置
// 首先打开manifest.json文件勾选
<uses-permission android:name=\"android.permission.READ_CALL_LOG\"/>
<uses-permission android:name=\"android.permission.WRITE_CALL_LOG\"/>
技术点
plus.android.requestPermissions(Array[String] permissions, AndroidSuccessCallback successCb, AndroidErrorCallback errorCB);
说明:
向系统请求权限,Android系统6+版本(API等级23+),并且必须设置targetSdkVersion>=23,参考:https://ask.dcloud.net.cn/article/193。 如果权限属于危险权限并且用户没有授权则会弹出系统提示框由用户授权确认,如果已经授权或被用户拒绝则返回结果。 授权结果在successCb回调参数中可获取。
参数:
参数 | 类型 | 说明 |
---|---|---|
permissions | Array | 申请的权限列表 |
successCb | function | 申请权限成功回调函数 |
errorCB | function | 申请权限失败回调函数 |
successCb说明
返回值 | 类型 | 说明 |
---|---|---|
granted | Array | 已获取权限列表 |
deniedPresent | Array | 已拒绝(临时)的权限列表 |
deniedAlways | Array | 永久拒绝的权限列表 |
代码
// 首先判断该用户是否授权了直接拨号的权限
plus.android.requestPermissions(["android.permission.CALL_PHONE"], (resultObj) => {
let result = 0;
// 获取已授权的的列表,如["android.permission.CALL_PHONE"]已获得权限,该列表中就会出现
for (let i = 0, len = resultObj.granted.length; i < len; i++) {
let grantedPermission = resultObj.granted[i];
result = 1
}
// 获取本次拒绝授权的权限列表
for (let i = 0, len = resultObj.deniedPresent.length; i < len; i++) {
let deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
// 获取永久拒绝授权的权限列表
for (let i = 0, len = resultObj.deniedAlways.length; i < len; i++) {
let deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
if (result === 1) {
// 导入Activity、Intent类
let Intent = plus.android.importClass("android.content.Intent");
let Uri = plus.android.importClass("android.net.Uri");
// 获取主Activity对象的实例
let main = plus.android.runtimeMainActivity();
// 创建Intent
let uri = Uri.parse("tel:" + this.telephone);//这里可修改电话号码
let call = new Intent("android.intent.action.CALL",uri);
// 调用startActivity方法拨打电话
// telephone 需要拨号的手机号
plus.device.dial(telephone, false);
// false改为true时,需用户确认后再进行拨打
main.startActivity(call);
}
}, (errorCb) => {
console.log('申请权限错误:' + error.code + " = " + error.message);
})