gpt4 book ai didi

ios - 如何使用 AirDrop 发送和接收自定义数据

转载 作者:行者123 更新时间:2023-12-01 15:54:05 24 4
gpt4 key购买 nike

我已经为此苦苦挣扎了很久,因为我找不到任何详细的例子。

在我的应用程序中,我有一组自定义数据,我想通过 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)
}

这会将我的数据转换为 NSData 对象,用户获得 AirDrop 共享选项,并且数据将发送到另一部手机。到现在为止还挺好...

但是其他用户的应用程序如何知道如何接收呢?

我已经阅读了自定义 UTI 类型并声明了一种,但老实说,我不知道在声明中添加什么。你如何向 iOS 表明你发送的数据符合这个特定的 UTI?

网上到处都有 AirDrop 示例,但它们专注于共享图像等常见类型,我发现没有人详细共享自定义数据类型。

任何人都可以帮忙吗?

最佳答案

AirDrop sample code 涵盖如何定义您自己的文件类型/UTI 并使用它使用 AirDrop 发送您的自定义数据。

主要需要的零件如下。

  • 您应用的 Info.plist 中的以下键和值

    <...>
    <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>
    <...>
  • 支持接收您的自定义类型
    在应用程序委托(delegate)中,使用 fileURL 启动句柄通过实现

    Objective-C

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    swift

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    // Check if your app can open the URL
    // If it can, do something with the url and options, then return true
    // otherwise return false
    }

    确保在 inbox 中删除/移动要清理的文件文件夹,收到的文档存放在哪里(在您的应用程序的沙箱内)。
  • 支持发送自定义类型
    您传递给 UIActivityViewController 的项目应该是 fileURL到具有您注册为自定义文件类型的扩展名的文件,或符合 UIActivityItemSource 的对象协议(protocol)并返回 NSData输入

    - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController

    和您的实际 NSData滴入

    - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType

    然后在以下方法中,您将希望返回您在应用程序的 Info.plist 中注册的自定义类型的 UTI。 .

    - (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType

  • 示例代码有一个很好的例子来说明如何完成所有这些,以及如何通过包含适当大小和裁剪的预览照片来改善整个用户体验。

    关于ios - 如何使用 AirDrop 发送和接收自定义数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309338/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com