Flutter中使用photoManager无法获取视频问题求助
问题定位与修复方案
核心问题:权限请求仅申请了图片权限
你代码里的PermissionRequestOption中,AndroidPermission的type设置为RequestType(1),这对应RequestType.image枚举值,只申请了访问图片的权限——即便后续调用getAssetPathList时指定RequestType.all,权限不足也无法获取视频资源。
修复步骤:
1. 修正权限请求的媒体类型
将权限请求中的type改为RequestType.all,确保同时申请图片和视频的访问权限:
final PermissionRequestOption requestOption = PermissionRequestOption( androidPermission: const AndroidPermission( type: RequestType.all, // 替换原有的RequestType(1) mediaLocation: false, ), );
2. 确认Android权限配置正确
- Android 13及以上版本,在
AndroidManifest.xml中添加:<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/> - Android 12及以下版本,添加:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3. 优化「Recent」相册的获取逻辑
不同设备系统语言不同,相册名称可能不是"Recent"(比如中文设备显示「最近」),建议通过isAll属性判断——当getAssetPathList设置hasAll: true时,会返回一个包含所有媒体的相册,其isAll为true,这种方式更可靠:
AssetPathEntity recentAlbum = paths.firstWhere( (album) => album.isAll, // 替换原有的名称判断逻辑 orElse: () => paths.first, );
4. 验证视频资源获取
修改后重新运行,videoMedia列表应能正确返回设备中的视频文件,界面上的视频图标也会正常显示。
内容的提问来源于stack exchange,提问作者Mohammad Soqar
相关产品推荐
相关产品推荐

