harmonyNext使用navigator.getUserMedia提示Permission denied(已经使用UTS方式申请摄像头麦克风权限)

harmonyNext使用navigator.getUserMedia提示Permission denied(已经使用UTS方式申请摄像头麦克风权限)

开发环境 版本号 项目创建方式
Mac Apple M3 15.3.1 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS 5.0.0

手机厂商:模拟器

手机机型:模拟器

页面类型:vue

vue版本:vue3

打包方式:离线

项目创建方式:HBuilderX


操作步骤:

  1. 在app刚刚启动的时候就申请了麦克风和摄像头权限了
  2. 在vue模块里面使用renderJs调用下面代码时候提示错误,fail Permission denied ,这个在安卓平台上是正常的。
navigator.getUserMedia(  
    {  
        audio: {  
            echoCancellation: true,  
            noiseSuppression: true  
        },  
        video: false,  
    },  
    (stream) => {  
        console.log("okok")  
    },  
    (error) => {  
        console.log("fail", error.message)  
    }  
)

预期结果:

navigator.getUserMedia(  
    {  
        audio: {  
            echoCancellation: true,  
            noiseSuppression: true  
        },  
        video: false,  
    },  
    (stream) => {  
        console.log("okok")  
    },  
    (error) => {  
        console.log("fail", error.message)  
    }  
)

预期结果是打印“okok”

实际结果:

navigator.getUserMedia(  
    {  
        audio: {  
            echoCancellation: true,  
            noiseSuppression: true  
        },  
        video: false,  
    },  
    (stream) => {  
        console.log("okok")  
    },  
    (error) => {  
        console.log("fail", error.message)  
    }  
)

实际结果是打印“fail Permission denied”

bug描述:

  1. 在app刚刚启动的时候就申请了麦克风和摄像头权限了
  2. 在vue模块里面使用renderJs调用下面代码时候提示错误,fail Permission denied ,这个在安卓平台上是正常的。
navigator.getUserMedia(  
    {  
        audio: {  
            echoCancellation: true,  
            noiseSuppression: true  
        },  
        video: false,  
    },  
    (stream) => {  
        console.log("okok")  
    },  
    (error) => {  
        console.log("fail", error.message)  
    }  
)

3 回复

harmonyNext申请权限用的是https://ext.dcloud.net.cn/plugin?id=22032插件


分别是用过下面集中方式都不行

navigator.mediaDevices.getUserMedia
navigator.getUserMedia
navigator.webkitGetUserMedia

在HarmonyOS NEXT环境下,navigator.getUserMedia在renderJs中返回"Permission denied"是已知的平台兼容性问题。HarmonyOS NEXT对Web API的支持与Android存在差异,getUserMedia接口在renderJs环境中可能无法正确识别UTS模块申请的底层权限。

建议改用以下方案:

  1. 使用uni原生插件替代:通过UTS开发原生插件直接调用HarmonyOS的音频采集API,完全绕过Web API的兼容性问题。

  2. 采用条件编译处理:

// #ifdef APP-HARMONY
// 调用HarmonyOS原生音频采集接口
// #endif
// #ifdef APP-ANDROID
navigator.getUserMedia({
    audio: {
        echoCancellation: true,
        noiseSuppression: true
    },
    video: false
}, (stream) => {
    console.log("okok")
}, (error) => {
    console.log("fail", error.message)
})
// #endif
回到顶部