【问题标题】:Custom IntentResponse return image自定义 IntentResponse 返回图像
【发布时间】:2020-12-25 13:23:40
【问题描述】:

我的应用程序应该向快捷方式应用程序捐赠一个快捷方式,以检索随机图像。 但是我无法返回图像,并且确实了解应该如何完成。

我的意图文件如下。由于“图像”不是可能的返回类型,我改为返回一个文件。

我的代码:

class TestIntentHandler: NSObject, TestIntentIntentHandling {
        func handle(intent: TestIntentIntent, completion: @escaping (TestIntentIntentResponse) -> Void) {
            let response = TestIntentIntentResponse(code: .success, userActivity: nil)
            let data = UIImage(named: "test")!.pngData()!
            response.image = INFile(data: data, filename: "tester", typeIdentifier: "png")
            completion(response)
        }
        
      func confirm(intent: TestIntentIntent, completion: @escaping (TestIntentIntentResponse) -> Void) {
        completion(TestIntentIntentResponse(code: .ready, userActivity: nil))
      }
}

但测试快捷方式不显示图像。

【问题讨论】:

    标签: ios swift xcode sirikit sirishortcuts


    【解决方案1】:

    尝试运行相同类型的代码,发现如果您在创建INFile 对象时为其提供正确的typeIdentifier (UTI),Shortcut 会将文件识别为图像。例如,要显示 PNG 文件,您可以使用 "public.png"

    这是一个将操作结果显示为图像的快捷方式示例

    现在您的问题可能是“我从哪里获得这些标识符?”。好吧,这取决于您的目标 iOS 版本。您可以使用 UTTypeCreatePreferredIdentifierForTag(iOS or you can read the Apple reference list here

    我将在此处留下 UTTypeCreatePreferredIdentifierForTag 示例,由 this answer 提供

    let fileExtension = "png" // This could be extracted from an URL
    let uti = UTTypeCreatePreferredIdentifierForTag(
        kUTTagClassFilenameExtension,
        fileExtension,
        nil)
    

    ...以及 URL 示例,由this other answer提供

    extension URL {
        var typeIdentifier: String? { (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier }
        var localizedName: String? { (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 2019-02-12
      • 2012-11-02
      • 1970-01-01
      • 2023-01-11
      相关资源
      最近更新 更多