Iphone 使用AirDrop发送和接收文件

Iphone 使用AirDrop发送和接收文件,iphone,objective-c,file,sharing,airdrop,Iphone,Objective C,File,Sharing,Airdrop,有人举过如何将AirDrop添加到应用程序中以发送和接收文档文件夹中的文件的例子吗?我正在尝试在iPhone和iPad应用程序之间共享SQLite数据库。我做了很多研究,看起来空投是一条可行之路,但我在想办法时遇到了问题 我知道我需要使用UIActivityViewController打开AirDrop,这不是问题,但如何在两个设备之间建立连接?有没有一个简单的例子可以帮助我走上正确的道路 谢谢大家! 您不需要在设备之间建立连接。您只需使用类似这样的代码呈现UIActivityViewContr

有人举过如何将AirDrop添加到应用程序中以发送和接收文档文件夹中的文件的例子吗?我正在尝试在iPhone和iPad应用程序之间共享SQLite数据库。我做了很多研究,看起来空投是一条可行之路,但我在想办法时遇到了问题

我知道我需要使用UIActivityViewController打开AirDrop,这不是问题,但如何在两个设备之间建立连接?有没有一个简单的例子可以帮助我走上正确的道路


谢谢大家!

您不需要在设备之间建立连接。您只需使用类似这样的代码呈现UIActivityViewController,当用户选择空投选项时,它就会为您提供服务

NSString* text = @"Some text I want to share";
UIImage* image = [UIImage imageNamed:@"image.png"];
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[text, image] applicationActivities:nil];
activityViewController.completionHandler = ^(NSString* activityType, BOOL completed) {
    // do whatever you want to do after the activity view controller is finished
};
[self presentViewController:activityViewController animated:YES completion:nil]; 

在iOS 7中,苹果引入了一种叫做空投的新技术,与附近的其他iOS设备共享数据。AirDrop使用蓝牙扫描附近的设备。当通过蓝牙建立连接时,它将创建一个特殊的Wi-Fi网络,将两个设备连接在一起,从而实现更快的数据传输。这并不意味着您需要将设备连接到Wi-Fi网络才能使用AirDrop。只需打开WiFi即可进行数据传输

iOS 7 SDK中提供的UIActivityViewController类可以轻松集成此功能。使用以下代码在iOS应用程序中集成空投共享功能

- (NSURL *)generateFileURL:(NSString*)filename
{
      NSArray *fileComponents = [filename componentsSeparatedByString:@"."];
      NSString *filePath = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];

      return [NSURL fileURLWithPath:filePath];
}

- (IBAction) shareButtonClicked:(UIButton *)button
{
      NSString * fileName = @"testImage.png";     // @"myFile.pdf"
      NSURL *url = [self generateFileURL:fileName];

      UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];

      // you can exclude certain types of activities. You can just display the AirDrop activity by excluding all other activities. 
      NSArray *excludedActivities = @[UIActivityTypePostToWeibo, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo];
      activityViewController.excludedActivityTypes = excludedActivities;

      [self presentViewController:activityViewController animated:YES completion:^{ }];
}

如果将文件保存到documents目录,则需要从上面更改URL

 NSURL *url = [NSURL fileURLWithPath:[self dataFilePath]];

-(NSString *)dataFilePath {
 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"myFile.txt"];
}
此外,我发现如果不排除更多活动,会有很长的延迟(1-2分钟):

NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
                                    UIActivityTypePostToWeibo,
                                    UIActivityTypeMessage, UIActivityTypeMail,
                                    UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
                                    UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
                                    UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
                                    UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];

UIImage*image=imageView.image; NSArray*项=@[image]

// build an activity view controller
UIActivityViewController *controller = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];

// and present it
[self presentViewController:controller animated:YES completion:^{
    // executes after the user selects something
}];

UIActivityViewController
非常方便,但我希望以编程方式发送文件。我希望myDeviceApp扫描所有启用空投的设备,获取每个设备的UUID,并同时或同步向所有设备发送图片或视频。1.如何获取myDeviceApp范围内每个设备的UUID?2.如何以编程方式将数据发送到所有设备?+1,因为共享文件的URL要快得多,并显示适当的元数据和共享选项(例如“添加标记”)