3

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 のバグですか?

4

0 に答える 0