在移动设备(iOS 和 Android)上使用 Flutter,如何将媒体移动到相册?
我尝试在 iOS 上结合 gallery_saver
和 photo_manager
:
- 我从
Recents
中读取了媒体AssetEntity
- 使用
GallerySaver.saveImage
将AssetEntity
文件保存在相册下。此时,Recents
将同一媒体播放了两次,这是有道理的。 - 尝试使用
PhotoManager.editor.deleteWithIds
删除原始AssetEntity
文件,并显示一个 native 弹出窗口,询问用户是否可以删除媒体。用户体验不佳...
有没有办法在不创建新文件的情况下更改 AssetEntity
相册?
最佳答案
2020 年 4 月更新
值得庆幸的是,该库的作者最近更新了它,以包含本答案中讨论的相册删除功能。你可以看到他们的pull request 。或者引用方法调用removeAssetsInAlbum
在 README
问题
photo_manager
图书馆正在使用 PHAssetChangeRequest的方法deleteAssets(_:) 。你可以看到这个here 。这将删除实际文件,而不仅仅是将其从相册中删除(更多信息请参见“说明”部分)
解决方案
解决方案是使用 PHAssetCollectionChangeRequest的方法。取决于您的用例:
将资源从相册移动到另一个相册
从相册中删除资源
将资源添加到相册
说明
删除 Assets 和移除 Assets 之间是有区别的。删除 Assets 文件是通过 PHAssetChangeRequest 完成的这会永久删除 Assets 文件及其从相册中的引用。但删除 Assets 是通过 PHAssetCollectionChangeRequest 完成的这会从专辑中删除 Assets 的引用(而不是文件),而不删除文件本身。检查这个answer .
该怎么办?如何应用该解决方案?
此部分现已过时,但保留用于 photo_manager
时的其他用例。无法使用,如需使用请引用本答案顶部photo_manager
<罢工> 您可以从以下选项中选择一个来解决您的问题:
- 在库中查找我上面解释的相册方法
photo_manager
,也许就在那里? 编辑1我刚刚寻找PHAssetCollectionChangeRequest的方法。 Currently不支持/不使用。 - 向库添加问题并要求作者进行上述更改
- 通过 PR 或您自己的克隆版本将它们添加到库中 图书馆
- 使用自己的平台 channel 并自行处理。
<罢工>罢工>
更改示例:
目前photo_manager
uses PHAssetChangeRequest
的方法deleteAssets(_:) :
[PHAssetChangeRequest deleteAssets:result];
这应该更改为使用 PHAssetCollectionChangeRequest
的方法removeAssets(_:) :
[PHAssetCollectionChangeRequest removeAssets:result];
关于android - 如何在移动设备(iOS 和 Android)上使用 Flutter 将照片/视频移动到相册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804556/