吉安感知网项目-前端
张含笑
2026-02-10 8aebabe92487b1853e2a06b5105c26923cdca1ed
feat:获取权限
1 files modified
83 ■■■■■ changed files
uniapps/work-app/src/subPackages/voiceCallDetail/index.vue 83 ●●●●● patch | view | raw | blame | history
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>