3

使用 AirDrop,我想分享资源库中的视频。

关于 AirDrop,文档说:

使用此服务时,您可以提供 NSString、NSAttributedString、UIImage、ALAsset 和 NSURL 对象作为活动项的数据。您还可以指定其内容使用 assets-library 方案的 NSURL 对象。您还可以提供包含列出的数据类型的 NSArray 或 NSDictionary 对象。

我看到的想法是,如果活动项的数据是带有资产库方案的 NSURL,则传输失败并出现以下错误:

发件人 kSFOperationEventErrorOccured { Error = "Error Domain=SFOperation Code=-6 \"传输失败,因为您没有\U2019t 权限读取 \U201cIMG_0119.MP4\U201d。\" UserInfo=0x155f5db0 {NSLocalizedDescription=传输失败,因为您没有\ 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