UIDocumentInteractionController предотвращает раздачу на листе «Открыть в»

введите здесь описание изображения

В своем приложении я разрешаю пользователям обмениваться фотографиями через Instagram, что требует использования UIDocumentInteractionController. Airdrop определяется автоматически, если телефон поддерживает его. Как удалить его из списка действий «Открыть в»?

Даже если я начну процесс обмена с UIActivityViewController и вызову setExcludedActivityTypes:, в конечном итоге мне придется использовать UIDocumentInteractionController, и когда я это сделаю, Airdrop появится снова. Вот код, когда нажимается кнопка «Поделиться»:

NSURL *instagramURL = [NSURL URLWithString:@"instagram://location?id=1"];

if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"Image.igo"];

    NSData *imageData = UIImagePNGRepresentation(imageToShare);
    [imageData writeToFile:savedImagePath atomically:YES];
    NSURL *imageUrl = [NSURL fileURLWithPath:savedImagePath];
    docController = [[UIDocumentInteractionController alloc] init];
    docController.UTI = @"com.instagram.exclusivegram";
    docController.URL = imageUrl;
    [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

}
else
{
    NSLog(@"no insta");
}

person EHNole    schedule 02.10.2013    source источник
comment
Имея ту же проблему.   -  person n13    schedule 15.10.2014


Ответы (2)


Насколько я могу судить, вы не можете. Мне также нужно отключить эту опцию. Но на UIDocumentInteractionController он совершенно недоступен. Довольно плохой опыт работы с API в моей книге.

Если пользователь выбирает приложение в списке, ваше приложение получает обратные вызовы

-(void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application

-(void)documentInteractionController: (UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application

Если пользователь выбирает AirDrop, вы вообще не получаете уведомления.

person Tim LeMaster    schedule 03.10.2013
comment
Одна вещь, которую я заметил, это то, что нажатие AirDrop часто не работает, даже когда я и кто-то в комнате включили его. - person EHNole; 04.10.2013

Это невозможно удалить, и Apple все еще пытается сделать аирдроп доступным везде, поэтому нам, возможно, придется увидеть это еще в нескольких местах в будущем. Начиная с обновления 7.1, он обязательно появится в UIDocumentInteractionController независимо от статуса раздачи (включен или выключен на устройстве)

И еще одна плохая вещь: нет обратного вызова для раздачи по воздуху, что означает, что ваше приложение никогда не узнает о статусе раздачи. Ниже 2 делегата не будут работать для общего доступа.

-(void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application

-(void)documentInteractionController: (UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application

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

person Anil Kumar    schedule 30.04.2014