90 lines
2.6 KiB
JavaScript
90 lines
2.6 KiB
JavaScript
// 动态请求打电话权限(通用方法)
|
||
export function requestCallPermission() {
|
||
return new Promise((resolve, reject) => {
|
||
if (uni.getSystemInfoSync().platform !== 'android') {
|
||
// 非安卓设备直接返回(如iOS不需要此权限)
|
||
resolve(true);
|
||
return;
|
||
}
|
||
|
||
plus.android.requestPermissions(
|
||
["android.permission.CALL_PHONE"],
|
||
(result) => {
|
||
const granted = result.granted || [];
|
||
const deniedAlways = result.deniedAlways || [];
|
||
|
||
if (granted.includes("android.permission.CALL_PHONE")) {
|
||
resolve(true);
|
||
} else if (deniedAlways.length > 0) {
|
||
// 永久拒绝,引导至设置页
|
||
uni.showModal({
|
||
title: "权限不足",
|
||
content: "请在设置中开启电话权限以使用拨号功能",
|
||
confirmText: "去设置",
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
plus.runtime.openURL("app-settings:");
|
||
}
|
||
resolve(false);
|
||
}
|
||
});
|
||
} else {
|
||
// 临时拒绝,提示用户
|
||
uni.showToast({ title: "需要电话权限才能拨号", icon: "none" });
|
||
resolve(false);
|
||
}
|
||
},
|
||
(err) => {
|
||
console.error("权限请求失败:", err);
|
||
resolve(false);
|
||
}
|
||
);
|
||
});
|
||
}
|
||
|
||
// 判断是否为华为设备
|
||
export function isHuaweiDevice() {
|
||
return new Promise((resolve) => {
|
||
uni.getSystemInfo({
|
||
success: (res) => {
|
||
const brand = (res.brand || '').toLowerCase();
|
||
resolve(brand.includes('huawei'));
|
||
},
|
||
fail: () => resolve(false)
|
||
});
|
||
});
|
||
}
|
||
|
||
// 统一拨号入口(根据设备类型选择方式)
|
||
export async function makePhoneCall(phoneNumber) {
|
||
if (!phoneNumber) {
|
||
uni.showToast({ title: "请输入正确的手机号", icon: "none" });
|
||
return;
|
||
}
|
||
|
||
// 先请求权限
|
||
const hasPermission = await requestCallPermission();
|
||
if (!hasPermission) return;
|
||
|
||
// 判断设备类型
|
||
const isHuawei = await isHuaweiDevice();
|
||
|
||
try {
|
||
if (isHuawei) {
|
||
// 华为设备使用plus原生API,显示拨号界面(避免直接拨号失败)
|
||
plus.device.dial(phoneNumber, false);
|
||
} else {
|
||
// 其他设备使用uni标准API
|
||
uni.makePhoneCall({
|
||
phoneNumber: phoneNumber,
|
||
fail: (err) => {
|
||
console.error("拨号失败:", err);
|
||
uni.showToast({ title: "拨号失败,请重试", icon: "none" });
|
||
}
|
||
});
|
||
}
|
||
} catch (err) {
|
||
console.error("拨号异常:", err);
|
||
uni.showToast({ title: "系统不支持该操作", icon: "none" });
|
||
}
|
||
} |