HarmonyOS 把沙盒的音频读取存到系统里,下载成功了但是在系统的文件打开音频去播放显示预览失败?

把沙盒的音频读取存到系统里,下载成功了但是在系统的文件打开音频去播放显示预览失败。

阅读 529
1 个回答

跟沙箱目录应该没关系,先看下保存后的音频文件格式是否正确,如m4a、mp3等等,可以再试下下面demo方案获取到沙箱路径后 =\> 调用picker.save =\> 获取到url进行copy保存,localPath参数为沙箱路径。

export function saveFromDPicker(localPath: string) {
  try {
    let audioSaveOptions = new picker.AudioSaveOptions();
    audioSaveOptions.newFileNames = ['AudioViewPicker01.mp3'];
    let audioPicker = new picker.AudioViewPicker(context);
    audioPicker.save(audioSaveOptions).then((audioSaveResult: Array<string>) => {
      let uri = audioSaveResult[0];
      copyFileToCommon(localPath, uri)
    }).catch((err: BusinessError) => {
      console.error('AudioViewPicker.save failed with err: ' + JSON.stringify(err));
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('AudioViewPicker failed with err: ' + JSON.stringify(err));
  }
}

// 拷贝文件,从沙箱拷贝到公共目录
export function copyFileToCommon(src: string, dst: string) {
  try {
    let file = fs.openSync(src, fs.OpenMode.READ_ONLY);
    let file2 = fs.openSync(dst, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); //先创建有读写权限的文件,再把不可读写的文件复制过来
    fs.copyFileSync(file.fd, file2.fd);
  } catch (e) {
    console.error("tag copy error")
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进