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