uni-app uni.getRecorderManager 在harmony next 下无任何反应

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app uni.getRecorderManager 在harmony next 下无任何反应

开发环境 版本号 项目创建方式
PC Mac CLI
手机 HarmonyOS NEXT -
手机版本 HarmonyOS NEXT Developer Preview -
手机厂商 华为 -
手机机型 mate60 pro -
页面类型 vue -
vue版本 vue3 -
打包方式 离线 -
CLI版本 3.0.0-4020420240722002 -

示例代码:

组件中使用uni.getRecorderManager():  
```vue
```javascript
beforeMount() {
    this.setStyle()
    console.log('harmony this.recorder1:', this.recorder)
    try {
        // #ifndef H5
        this.recorder = uni.getRecorderManager()
        // #endif
    } catch (error) {
        console.log('harmony this.recorder error:', error)
    }
    console.log('harmony this.recorder2:', this.recorder)
}

在真机运行,catch输出:

harmony this.recorder error: TypeError: is not callable at components/u-voice-to-text/index.vue:70
harmony this.recorder2: undefined at components/u-voice-to-text/index.vue:72
执行无效

操作步骤:

函数执行无效,获取为undefined

原生中module.json5配置有麦克风权限:

{
    "name": "ohos.permission.MICROPHONE",
    "reason": "$string:microphone_tips",
    "usedScene": {}
}

预期结果:

返回正确的对象

实际结果:

返回undefined

bug描述:


6 回复

你好,getRecorderManager需要升级4.28才可以使用,你是4.28吗?
如果听不到声音,可以看一下是不是模拟器的声音没有开,或者是声音太小了


dependencies": { “@dcloudio/uni-app”: “3.0.0-4020420240722002”, “@dcloudio/uni-app-harmony”: “3.0.0-4020420240722002”, “@dcloudio/uni-app-plus”: “3.0.0-4020420240722002”, “@dcloudio/uni-components”: “3.0.0-4020420240722002”, “@dcloudio/uni-h5”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-alipay”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-baidu”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-jd”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-kuaishou”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-lark”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-qq”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-toutiao”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-weixin”: “3.0.0-4020420240722002”, “@dcloudio/uni-mp-xhs”: “3.0.0-4020420240722002”, “@dcloudio/uni-quickapp-webview”: “3.0.0-4020420240722002”, … } cli创建的工程,需要升级到3.0.0-alpha-4020820240914001?

回复 2***@qq.com: 是的,需要升级

回复 DCloud_UNI_yuhe: 真的无语,尝试升级立马出现了另外一个 bug:https://ask.dcloud.net.cn/question/198752

回复 2***@qq.com: 运行到鸿蒙DevEco-Studio,现在是在app那一栏里面

在uni-app中使用uni.getRecorderManager进行录音功能时,如果遇到在harmony next环境下无任何反应的问题,这通常是由于API的适配或者调用方式不正确所导致的。以下是一个基本的录音功能实现代码示例,同时确保你在harmony next环境下正确使用了相关API。

首先,确保你的项目已经正确配置并运行在harmony next模式下。接下来,你可以参考以下代码来实现录音功能:

<template>
  <view>
    <button @click="startRecording">开始录音</button>
    <button @click="stopRecording" :disabled="!isRecording">停止录音</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      recorderManager: null,
      isRecording: false,
      tempFilePath: ''
    };
  },
  mounted() {
    this.recorderManager = uni.getRecorderManager();

    this.recorderManager.onStop((res) => {
      console.log('录音停止', res);
      this.tempFilePath = res.tempFilePath;
      this.isRecording = false;
      // 这里可以添加保存或播放录音文件的逻辑
    });

    this.recorderManager.onError((err) => {
      console.error('录音错误', err);
      this.isRecording = false;
    });
  },
  methods: {
    startRecording() {
      if (this.isRecording) return;
      this.isRecording = true;
      this.recorderManager.start({
        format: 'mp3', // 或者 'aac'
        sampleRate: 44100
      });
    },
    stopRecording() {
      if (!this.isRecording) return;
      this.recorderManager.stop();
    }
  }
};
</script>

<style scoped>
button {
  margin: 10px;
}
</style>

在上面的代码中,我们创建了一个简单的录音界面,包含两个按钮:一个用于开始录音,另一个用于停止录音。在组件挂载时,我们通过uni.getRecorderManager()获取录音管理器,并为其绑定onStoponError事件处理函数。

注意几点:

  1. 确保你的uni-app版本支持harmony next模式,并且相关依赖已经更新到最新版本。
  2. 检查manifest.json文件中是否已经启用了harmony next模式。
  3. 由于不同平台(如小程序、App等)对录音功能的支持可能有所不同,确保在目标平台上测试你的代码。
  4. 如果问题依旧存在,可以尝试查看uni-app的官方文档或社区,看看是否有其他开发者遇到并解决了类似的问题。

以上代码提供了一个基本的框架,你可以根据需要进行扩展和修改。

回到顶部