ios - 自定义 IntentResponse 返回图像
问题描述
我的应用程序应该向快捷方式应用程序捐赠一个快捷方式,以检索随机图像。但是我无法返回图像,并且理解应该如何完成。
我的意图文件如下。由于“图像”不是可能的返回类型,我改为返回一个文件。
我的代码:
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))
}
}
但测试快捷方式不显示图像。
解决方案
尝试运行相同类型的代码,发现如果您在创建对象时给它正确typeIdentifier
(UTI) ,Shortcut 会将文件识别为图像。INFile
例如,要显示 PNG 文件,您可以使用"public.png"
现在您的问题可能是“我从哪里获得这些标识符?” . 好吧,这取决于您的目标 iOS 版本。您可以使用 UTTypeCreatePreferredIdentifierForTag(iOS <14) 或 UTType (iOS 14+),如果包含 URL,则直接从 URL 中提取它,或者您可以在此处阅读 Apple 参考列表
我将在这里留下 UTTypeCreatePreferredIdentifierForTag 示例,由这个答案提供
let fileExtension = "png" // This could be extracted from an URL
let uti = UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension,
fileExtension,
nil)
...和 URL 示例,由其他答案提供
extension URL {
var typeIdentifier: String? { (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier }
var localizedName: String? { (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName }
}
推荐阅读
- mysql - 优化表时,有没有办法判断它“锁定”了多长时间?
- postgresql - 在 Postgres 中使用 ilike 进行连接中的部分字符串匹配
- geocoding - 'NoneType' 对象不可迭代...提名地理编码
- security - Rest API 实时棘手问题 - 需要答案
- opencart - OpenCart 3 - 通过直接 URL 显示制造商类别中的所有产品
- css - 如何在 css 网格中将 minmax 函数与 vh 结合起来?
- wordpress - Woocommerce Rest API:woocommerce_product_invalid_image_id
- javascript - 有没有办法利用标签上的 display:none 功能来删除整页?
- php - 简单的php ajax分页,如何获取请求url
- go - oc.exe 命令提示符中的 OpenShift GoLang 模板解析错误: if 中出现意外的未关闭操作