uni-app uni.saveVideoToPhotosAlbum在自定义调试基座中正常 正式包中不正常

uni-app uni.saveVideoToPhotosAlbum在自定义调试基座中正常 正式包中不正常

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

手机系统:Android

手机系统版本号:Android 12

手机厂商:荣耀

手机机型:X40 GT

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:

uni.saveVideoToPhotosAlbum({
filePath: filePath,
success: () => {
uni.showToast({
icon: 'success',
title: 'Success'
})
},
fail: (e) => {
uni.showToast({
title: e.errMsg || 'Error'
})
},
complete: () => {  
}  
});

操作步骤:

正常调用api

预期结果:

自定义调试基座中正常,正式包正常

实际结果:

自定义调试基座中正常走success,正式包走fail

bug描述:

如题,uni.saveVideoToPhotosAlbum这个api在自己打包的自定义调试基座中可以正常保存视频到相册,但是一切换到云端打正式包就会报fail,请官方人员排查原因,谢谢!


更多关于uni-app uni.saveVideoToPhotosAlbum在自定义调试基座中正常 正式包中不正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.saveVideoToPhotosAlbum在自定义调试基座中正常 正式包中不正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 开发中,uni.saveVideoToPhotosAlbum 是一个用于将视频保存到相册的 API。如果你在自定义调试基座中正常,但在正式包中不正常,可能是由于以下原因导致的:

1. 权限问题

  • 调试基座:在调试基座中,可能已经默认获取了相关权限,或者调试基座本身有更高的权限。
  • 正式包:在正式包中,可能需要手动申请权限,或者用户没有授予相关权限。

解决方案

  • 在调用 uni.saveVideoToPhotosAlbum 之前,确保已经获取了 WRITE_EXTERNAL_STORAGE 权限。
  • 可以使用 uni.authorizeuni.getSetting 来检查和申请权限。
uni.getSetting({
    success(res) {
        if (!res.authSetting['scope.writePhotosAlbum']) {
            uni.authorize({
                scope: 'scope.writePhotosAlbum',
                success() {
                    // 用户同意授权
                    uni.saveVideoToPhotosAlbum({
                        filePath: 'your_video_path',
                        success() {
                            console.log('视频保存成功');
                        },
                        fail(err) {
                            console.log('视频保存失败', err);
                        }
                    });
                },
                fail() {
                    // 用户拒绝授权
                    console.log('用户拒绝授权');
                }
            });
        } else {
            // 已经授权
            uni.saveVideoToPhotosAlbum({
                filePath: 'your_video_path',
                success() {
                    console.log('视频保存成功');
                },
                fail(err) {
                    console.log('视频保存失败', err);
                }
            });
        }
    }
});

2. 文件路径问题

  • 调试基座:在调试基座中,文件路径可能是临时的或者模拟的路径。
  • 正式包:在正式包中,文件路径可能不正确,或者文件不存在。

解决方案

  • 确保 filePath 是正确的,并且文件确实存在。
  • 可以使用 uni.getFileSystemManager 来检查文件是否存在。
const fileManager = uni.getFileSystemManager();
fileManager.access({
    path: 'your_video_path',
    success() {
        // 文件存在
        uni.saveVideoToPhotosAlbum({
            filePath: 'your_video_path',
            success() {
                console.log('视频保存成功');
            },
            fail(err) {
                console.log('视频保存失败', err);
            }
        });
    },
    fail() {
        // 文件不存在
        console.log('文件不存在');
    }
});

3. 打包配置问题

  • 调试基座:在调试基座中,某些配置可能是默认开启的。
  • 正式包:在正式包中,某些配置可能需要手动开启。

解决方案

  • 检查 manifest.json 文件,确保相关权限和配置已经正确设置。
  • 例如,确保 android.permission.WRITE_EXTERNAL_STORAGE 已经添加到 manifest.json 中。
{
    "app-plus": {
        "distribute": {
            "android": {
                "permissions": [
                    "android.permission.WRITE_EXTERNAL_STORAGE"
                ]
            }
        }
    }
}

4. 平台差异

  • 调试基座:在调试基座中,可能使用的是模拟器或特定设备。
  • 正式包:在正式包中,可能运行在不同的设备或平台上,导致行为不一致。

解决方案

  • 确保在不同设备和平台上进行测试,确保兼容性。
  • 可以使用 uni.getSystemInfo 来获取设备信息,并根据不同设备进行适配。
uni.getSystemInfo({
    success(res) {
        console.log('设备信息', res);
        // 根据设备信息进行适配
    }
});

5. 日志和错误处理

  • 调试基座:在调试基座中,可能更容易捕获错误信息。
  • 正式包:在正式包中,错误信息可能不易捕获。

解决方案

  • 在正式包中,确保有完善的错误处理机制,并记录日志。
  • 可以使用 uni.onError 来捕获全局错误。
uni.onError(function(error) {
    console.log('全局错误', error);
});
回到顶部