From 8aebabe92487b1853e2a06b5105c26923cdca1ed Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 10 Feb 2026 18:19:40 +0800
Subject: [PATCH] feat:获取权限
---
uniapps/work-app/src/subPackages/voiceCallDetail/index.vue | 83 ++++++++++++++++++++++++++++-------------
1 files changed, 57 insertions(+), 26 deletions(-)
diff --git a/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue b/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
index 32fde49..86c915e 100644
--- a/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
+++ b/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
@@ -15,7 +15,62 @@
const userParams = userStore?.userInfo ? JSON.stringify(userStore.userInfo) : '{}'
const sWebViewRef = ref(null);
const viewUrl = ref("");
-onLoad((options) => {
+
+// #ifdef APP-PLUS
+/**
+ * 请求 Android 麦克风权限
+ * @returns {Promise<boolean>} 权限是否授予
+ */
+async function requestAndroidMicPermission() {
+ try {
+ // 使用 uni 的权限 API(需要 HBuilderX 3.4.0+)
+ if (uni.requestPermissions) {
+ const result = await uni.requestPermissions({
+ permissions: ['android.permission.RECORD_AUDIO']
+ })
+
+ console.log('权限请求结果:', result)
+
+ if (result[0].granted) {
+ console.log('✅ 麦克风权限已授予')
+ return true
+ } else {
+ console.warn('⚠️ 麦克风权限被拒绝')
+
+ // 可以提示用户
+ uni.showModal({
+ title: '权限提示',
+ content: '语音通话需要麦克风权限,请前往设置开启',
+ showCancel: false,
+ success: () => {
+ // 跳转到应用设置
+ plus.runtime.openURL(plus.runtime.getProperty('package') + '://settings')
+ }
+ })
+ return false
+ }
+ }
+
+ // 降级方案:使用原生方法
+ return await requestAndroidMicPermissionNative()
+
+ } catch (error) {
+ console.error('❌ 请求麦克风权限失败:', error)
+ return false
+ }
+}
+// #endif
+
+onLoad(async (options) => {
+ // #ifdef APP-PLUS
+ // 在加载 WebView 前先请求麦克风权限
+ console.log('📞 语音通话页面加载,请求麦克风权限')
+ const hasPermission = await requestAndroidMicPermission()
+ if (!hasPermission) {
+ console.warn('⚠️ 未获得麦克风权限,通话功能可能无法使用')
+ }
+ // #endif
+
// 解析传递过来的contact参数
const contact = options.contact ? JSON.parse(decodeURIComponent(options.contact)) : null;
// 构建viewUrl,将contact参数拼接到URL中
@@ -23,32 +78,8 @@
// viewUrl.value = `https://192.168.1.157:5176/mobile-web-view/#/webViewWrapper/voiceCallDetail?params=${encodeURIComponent(userParams)}&contact=${contactParam}`;
viewUrl.value = getWebViewUrl("/voiceCallDetail", { contact: options.contact ,voiceparams: options.voiceparams});
});
+
function onPostMessage(data) {}
-// #ifdef APP-PLUS
-function requestAndroidMicPermission() {
- return new Promise((resolve) => {
- const main = plus.android.runtimeMainActivity()
- const Build = plus.android.importClass('android.os.Build')
- if (Build.VERSION.SDK_INT < 23) return resolve(true)
-
- const Manifest = plus.android.importClass('android.Manifest')
- const ActivityCompat = plus.android.importClass('androidx.core.app.ActivityCompat')
-
- const permission = Manifest.permission.RECORD_AUDIO
- ActivityCompat.requestPermissions(main, [permission], 1001)
-
- // 简化:延迟检查一次(更严谨可写原生回调插件)
- setTimeout(() => {
- const PackageManager = plus.android.importClass('android.content.pm.PackageManager')
- const granted = ActivityCompat.checkSelfPermission(main, permission) === PackageManager.PERMISSION_GRANTED
- resolve(granted)
- }, 800)
- })
-}
-
-
-requestAndroidMicPermission()
-// #endif
</script>
--
Gitblit v1.9.3