// 动态请求打电话权限(通用方法) 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" }); } }