AirDrop を使用して、アセット ライブラリからビデオを共有したいと考えています。
AirDrop に関しては、ドキュメントには次のように記載されています。
このサービスを使用すると、NSString、NSAttributedString、UIImage、ALAsset、および NSURL オブジェクトをアクティビティ項目のデータとして提供できます。コンテンツが assets-library スキームを使用する NSURL オブジェクトを指定することもできます。リストされたデータ型を含む NSArray または NSDictionary オブジェクトを提供することもできます。
私が考えているのは、アクティビティ アイテムのデータが assets-library スキームの NSURL である場合、次のエラーで転送が失敗するということです。
Sender kSFOperationEventErrorOccured { Error = "Error Domain=SFOperation Code=-6 \"The transfer failed because you don\U2019t have permission to read \U201cIMG_0119.MP4\U201d.\" UserInfo=0x155f5db0 {NSLocalizedDescription=The transfer failed because you don't\ U2019t には、\U201cIMG_0119.MP4\U201d を読み取る権限がありません。}"; ファイルアイコン = ""; ファイル = ( ); セッション ID = 9165CCC70A39; }
アセット ライブラリにあるビデオを AirDrop 経由で正常に共有できる唯一の方法は、ファイルを一時的な場所にコピーしてから、アクティビティ アイテムのデータを新しい NSURL に設定することです。基本的には次のようなものです:
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
ALAssetRepresentation* assetRepresentation = [self.asset defaultRepresentation];
NSString* outputDirectory = [NSString stringWithFormat:@"%@", NSTemporaryDirectory()];
NSString* path = [outputDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", assetRepresentation.filename]];
NSUInteger size = (NSUInteger)assetRepresentation.size;
NSMutableData* data = [NSMutableData dataWithLength:size];
NSUInteger bytesRead = [assetRepresentation getBytes:data.mutableBytes fromOffset:0 length:size error:nil];
if ([data writeToFile:path atomically:YES])
{
self.url = [NSURL fileURLWithPath:path];
}
return url;
}
ファイルを一時的な場所にコピーせずに、アセット ライブラリからビデオを共有できた人はいますか? 何か不足していますか、それとも SDK のバグですか?