uniapp 安卓 savevideotophotosalbum相册没有是怎么回事?

在使用uniapp开发安卓应用时,调用saveVideoToPhotosAlbum方法保存视频到相册,但相册中并没有显示保存的视频文件。请问可能是什么原因导致的?需要检查哪些权限或路径设置?

2 回复

可能是权限问题,检查是否已授权相册写入权限。也可能是路径或文件名问题,确保视频文件存在且路径正确。部分安卓机型需要手动授权相册权限。


在UniApp中,安卓设备调用saveVideoToPhotosAlbum API保存视频到相册失败或找不到,通常由以下原因导致:

  1. 权限问题:安卓6.0+需要动态申请存储权限(WRITE_EXTERNAL_STORAGE)。
  2. 文件路径无效:视频文件路径错误或文件不存在。
  3. 相册刷新延迟:系统相册未及时更新,需手动刷新。
  4. 路径限制:部分安卓机型对特定目录(如临时路径)不支持直接保存。

解决方案:

  1. 动态申请权限

    // 在调用保存前检查并申请权限
    uni.authorize({
      scope: 'scope.writePhotosAlbum',
      success() {
        // 权限已授予,执行保存
        saveVideo();
      },
      fail() {
        // 引导用户手动开启权限
        uni.showModal({
          content: '需要相册权限才能保存视频,请前往设置开启',
          success: (res) => {
            if (res.confirm) {
              uni.openSetting();
            }
          }
        });
      }
    });
    
    function saveVideo() {
      uni.saveVideoToPhotosAlbum({
        filePath: '视频文件路径(如临时路径或本地路径)',
        success: () => {
          uni.showToast({ title: '保存成功' });
        },
        fail: (err) => {
          console.error('保存失败:', err);
          uni.showToast({ title: '保存失败', icon: 'none' });
        }
      });
    }
    
  2. 检查文件路径

    • 确保filePath为有效路径(如通过uni.chooseVideo选择的临时路径tempFilePath)。
    • 示例:
      uni.chooseVideo({
        success: (res) => {
          const tempFilePath = res.tempFilePath;
          // 使用tempFilePath调用saveVideoToPhotosAlbum
        }
      });
      
  3. 刷新相册(部分机型需手动):

    • 保存后提示用户到相册中查看,或使用uni.scanCode(仅部分支持)触发媒体库更新。
  4. 使用绝对路径

    • 避免使用临时缓存路径,可先将文件移动到持久化目录(如uni.downloadFile下载到本地)。

注意事项:

  • 测试路径:在真机调试中确认文件可访问。
  • Android版本差异:高版本(Android 10+)可能需使用媒体存储API,但UniApp已做兼容。
  • 文件格式:确保视频格式(如MP4)被系统支持。

若问题持续,检查控制台错误日志,或尝试用原生插件(如Gallery)增强功能。

回到顶部