merchapp/java-mall-app-shop-admin/utils/callPhone.js

90 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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