使用 UIDocumentInteractionController 和 UIActivityViewController 时禁用共享扩展选项

Posted

技术标签:

【中文标题】使用 UIDocumentInteractionController 和 UIActivityViewController 时禁用共享扩展选项【英文标题】:Disable Share Extension options when use UIDocumentInteractionController and UIActivityViewController 【发布时间】:2016-12-06 04:57:27 【问题描述】:

我曾经使用UIDocumentInteractionControllerUIActivityViewController 与特殊的UTI 共享数据。

但是,当其他应用使用Share Extension时,弹出分享界面时可能会有copy tp xxximport to xxx等选项。

我如何禁用这些选项,或者是否有任何其他方式可以将数据共享到我可以控制的指定应用程序。

//======= 我的代码是这样的:

UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:@[itemUrl] applicationActivities:nil];
activity.excludedActivityTypes = @[UIActivityTypePostToFacebook, UIActivityTypePostToFacebook,UIActivityTypePostToWeibo,
                                   UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
                                   UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList,
                                   UIActivityTypePostToFlickr, UIActivityTypePostToFlickr, UIActivityTypePostToFlickr,
                                   UIActivityTypeAirDrop];
[self presentViewController:activity animated:YES completion:NULL];

【问题讨论】:

【参考方案1】:

创建一个数组并添加不想显示给用户的类型,像这样

NSArray *excludeActivities = @[UIActivityTypeAirDrop,
                                       UIActivityTypePrint,
                                       UIActivityTypeAssignToContact,
                                       UIActivityTypeSaveToCameraRoll,
                                       UIActivityTypeAddToReadingList,
                                       UIActivityTypePostToFlickr,
                                       UIActivityTypePostToVimeo,
                                       UIActivityTypeCopyToPasteboard];

Create a instance of UIActivityViewController
And set following propery
activityViewController.excludedActivityTypes = excludeActivities

【讨论】:

已经这样做了,它不能阻止那些有Share Extension的应用,它仍然显示copy to xxximport to xxx【参考方案2】:

我发现如果您分享为NSURL,您将获得copy to xxximport to xxx,但如果您分享为UIImage,您将无法获得。

将显示import to xxx

avc = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObjects:fileURL, nil] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

不会显示

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];
avc = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObjects:image, nil] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

【讨论】:

以上是关于使用 UIDocumentInteractionController 和 UIActivityViewController 时禁用共享扩展选项的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份