Отправка и получение файла с помощью AirDrop

У кого-нибудь есть примеры того, как добавить AirDrop в приложение для отправки и получения файла из папки документов? Я пытаюсь поделиться базой данных SQLite между приложением для iPhone и iPad. Я провел много исследований, и похоже, что AirDrop — это то, что нужно, но у меня проблемы с выяснением того, как это сделать.

Я знаю, что мне нужно открыть AirDrop с помощью UIActivityViewController, и это не проблема, но как мне установить соединение между двумя устройствами? У кого-нибудь есть простой пример, который поможет мне встать на правильный путь?

Благодарю вас!


person Jon    schedule 04.10.2013    source источник


Ответы (4)


Вам не нужно устанавливать соединение между устройствами. Вы просто представляете UIActivityViewController с помощью примерно такого кода, и когда пользователь выбирает вариант AirDrop, он позаботится об этом за вас.

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]; 
person Greg    schedule 05.10.2013
comment
UIActivityViewController очень удобно, но хотелось бы отправлять файлы программно. Я хочу, чтобы myDeviceApp сканировал все устройства с включенным AirDrop, получал UUID каждого устройства и одновременно или синхронно отправлял изображение или видео на все устройства. 1. Как я могу получить UUID каждого устройства, находящегося в диапазоне myDeviceApp? 2. Как программно отправить данные на все устройства? - person bibscy; 13.07.2019

В iOS 7 Apple представила новую технологию AirDrop для обмена данными с другими устройствами iOS, находящимися поблизости. AirDrop использует Bluetooth для поиска ближайших устройств. Когда соединение устанавливается через Bluetooth, создается специальная сеть Wi-Fi для соединения двух устройств, что обеспечивает более быструю передачу данных. Это не означает, что вам нужно подключать устройства к сети Wi-Fi, чтобы использовать AirDrop. Ваш Wi-Fi просто должен быть включен для передачи данных.

Класс UIActivityViewController, доступный в SDK iOS 7, упрощает интеграцию этой функции. Используйте приведенный ниже код, чтобы интегрировать функцию обмена AirDrop в ваше приложение для 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:^{ }];
}
person Himanshu Mahajan    schedule 19.12.2015
comment
+1, потому что обмен URL-адресом файла происходит значительно быстрее и отображает соответствующие метаданные, а также параметры обмена (например, «Добавить теги»). - person Sam Spencer; 20.06.2020

Если вы сохраните файл в каталог документов, вам нужно будет изменить 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];
person buckleyJohnson    schedule 18.05.2016

UIImage *image = imageView.image; NSArray *items = @[изображение];

// 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
}];
person Kumar Sunish    schedule 14.02.2017