UIDocumentInteractionController在'Open in'表单中阻止Airdrop

时间:2013-10-02 21:13:00

标签: ios objective-c cocoa-touch uidocumentinteraction airdrop

enter image description here

在我的应用中,我允许用户通过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");
}

2 个答案:

答案 0 :(得分:2)

据我所知,你不能。我也需要禁用此选项。但是在UIDocumentInteractionController上它是完全无法访问的。我书中的API经验非常糟糕。

如果用户在列表中选择了应用,则应用会获得回调

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

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

如果用户选择AirDrop,则根本不会收到通知。

答案 1 :(得分:0)

这是无法删除的,苹果仍然试图让空投在任何地方都可以访问,因此我们可能必须在未来的几个地方看到它。从7.1更新开始,它肯定会进入UIDocumentInteractionController而不管空投状态(设备开启或关闭)

另外还有一件坏事就是空投没有回调,这意味着你的应用永远不会知道共享状态。以下2名代表将无法分享。

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

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

我希望苹果会公开一些委托方法,以便在未来版本中实现这一目标。