如何解决IOS 14 请求限制照片访问
我正在尝试使用 PHPickerController 并访问 PHAsset 来获取文件名和文件大小,但 PHAsset 为空
var config = new PHPickerConfiguration(PHPhotoLibrary.SharedPhotoLibrary) {
Filter = PHPickerFilter.ImagesFilter,SelectionLimit = 1
};
var picker= new PHPickerViewController(config) {
ModalPresentationStyle = UIModalPresentationStyle.Popover,Delegate = new ImagePickerDelegate((fileSize,fileName,url) => {
})
};
ViewController.PresentViewController(picker,true,null);
public class ImagePickerDelegate : PHPickerViewControllerDelegate
{
public ImagePickerDelegate(Action<int,string,string> action)
{
Action = action;
}
public Action<int,string> Action { get; }
public override void DidFinishPicking(PHPickerViewController picker,PHPickerResult[] results)
{
picker.dismissViewController(true,null);
foreach (var result in results)
{
var asset = PHAsset.FetchAssets(result.AssetIdentifier,null)?.firstObject as PHAsset;
// The asset are null
var fileSize = asset.ValueForKey((Nsstring)"fileSize");
}
}
}
var asset = PHAsset.FetchAssets(result.AssetIdentifier,null)?.firstObject as PHAsset;
并返回空
解决方法
您可以使用 FetchAssetsUsingLocalIdentifiers 方法获取 PHAsset 对象,然后它会返回值。
示例代码如下:
public override void DidFinishPicking(PHPickerViewController picker,PHPickerResult[] results)
{
picker.DismissViewController(true,null);
foreach (var result in results)
{
var refID = result.AssetIdentifier;
string[] refIDs = new string[] { refID };
var asset = PHAsset.FetchAssetsUsingLocalIdentifiers(refIDs,null)?.firstObject as PHAsset;
// var fileSize = asset.ValueForKey((NSString)"fileSize");
}
}
也可以看看这个native code link。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。