| | |
| | | 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中 |
| | |
| | | // 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> |
| | | |