Files
uniapp-im-shop/TUIKit/utils/permission.js
2025-12-30 23:28:59 +08:00

102 lines
3.5 KiB
JavaScript
Raw Permalink 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.
let isIos;
// #ifdef APP-PLUS
isIos = (plus.os.name == 'iOS');
// #endif
// 判断麦克风权限是否开启iOS
function judgeIosPermissionRecord() {
let result = false;
const avaudiosession = plus.ios.import('AVAudioSession');
const avaudio = avaudiosession.sharedInstance();
const permissionStatus = avaudio.recordPermission();
console.log('[Permission] iOS permissionStatus:', permissionStatus);
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
console.log('[Permission] iOS 麦克风权限没有开启');
} else {
result = true;
console.log('[Permission] iOS 麦克风权限已经开启');
}
plus.ios.deleteObject(avaudiosession);
return result;
}
// Android 权限查询
function requestAndroidPermission(permissionID) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
(resultObj) => {
let result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
const grantedPermission = resultObj.granted[i];
console.log(`[Permission] Android 已获取的权限:${grantedPermission}`);
result = 1;
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
const deniedPresentPermission = resultObj.deniedPresent[i];
console.log(`[Permission] Android 拒绝本次申请的权限:${deniedPresentPermission}`);
result = 0;
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
const deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log(`[Permission] Android 永久拒绝申请的权限:${deniedAlwaysPermission}`);
result = -1;
}
resolve(result);
},
(error) => {
console.log(`[Permission] Android 申请权限错误:${error.code} = ${error.message}`);
resolve({
code: error.code,
message: error.message,
});
},
);
});
}
// 跳转到**应用**的权限页面
function gotoAppPermissionSetting() {
if (isIos) {
const UIApplication = plus.ios.import('UIApplication');
const application2 = UIApplication.sharedApplication();
const NSURL2 = plus.ios.import('NSURL');
const setting2 = NSURL2.URLWithString('app-settings:');
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
} else {
const Intent = plus.android.importClass('android.content.Intent');
const Settings = plus.android.importClass('android.provider.Settings');
const Uri = plus.android.importClass('android.net.Uri');
const mainActivity = plus.android.runtimeMainActivity();
const intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
const uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
}
function checkPermissionStatusInApp(permission) {
const status = plus.navigator.checkPermission(permission);
switch (status) {
case 'authorized':
return 1;
case 'denied':
return -1;
default:
return 0; // 未授权或状态未知
// https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.checkPermission
}
}
export {
judgeIosPermissionRecord,
requestAndroidPermission,
gotoAppPermissionSetting,
checkPermissionStatusInApp,
};