Gre*_*reg 2 uti ios airdrop swift
我已经为此苦苦挣扎多年了,因为我找不到任何详细的示例。
在我的应用程序中,我有一系列自定义数据,我想通过AirDrop发送给使用同一应用程序的另一个用户。
第一步是发送数据:
@IBAction func share_Button_Click(sender: UIBarButtonItem)
{
let dataToShare: NSData = getMyCustomNSData()
let controller = UIActivityViewController(activityItems: [dataToShare], applicationActivities: nil)
controller.excludedActivityTypes = [UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypePostToFlickr, UIActivityTypePostToTencentWeibo, UIActivityTypeMail, UIActivityTypeAddToReadingList, UIActivityTypeOpenInIBooks, UIActivityTypeMessage]
self.presentViewController(controller, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
这会将我的数据转换为NSData对象,用户获得了AirDrop共享选项,并且其中的数据转到了另一部手机。到目前为止,一切都很好...
但是其他用户的应用程序如何知道如何接收它?
我已经阅读了有关自定义UTI类型的信息,并声明了一个类型,但是老实说,我不知道在声明中要添加什么。以及如何向iOS指示您发送的数据符合此特定的UTI?
在线上到处都有AirDrop示例,但它们专注于共享常见类型(如图像),而我发现没有人通过详细共享自定义数据类型来工作。
有人可以帮忙吗?
在空投的代码示例介绍了如何定义自己的文件类型/ UTI,并用它采用空投送您的自定义数据。
主要需要的部分是:
<...>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>AirDrop Profile File Type</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>LSItemContentTypes</key>
<array>
<string>com.apple.customProfileUTI.customprofile</string>
</array>
</dict>
</array>
<...>
要支持接收您的自定义类型:在应用程序委托中,通过实现来处理使用fileURL启动的情况- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation。确保删除/移动文件以在收件箱中进行清理。
为了支持发送一种自定义类型:传递给UIActivityViewController的项目应该是文件的URL,该文件应具有您注册为自定义文件类型的扩展名,或者如果对象符合UIActivityItemSource协议并返回NSData类型在中- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController,而您实际的NSData Blob在中- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType。然后,- (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType您要返回在info.plist中注册的自定义类型的UTI。
该示例代码提供了一个很好的示例,说明了如何执行所有这些操作,以及如何通过包含适当大小和裁剪后的预览照片来使整个UX更好。
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |