Skip to main content

外部调用 URL Scheme 与 AppLink

Omni Widgets 支持用外部调用链接触发 App 内动作。可以放在系统快捷指令、其它 App、二维码,也可以从卡片 JS 里用 Widget.openUrl() 打开。

协议展示为 OmniWidgets://,实际匹配不区分大小写。

也可以使用文档站域名的 HTTPS AppLink。已安装 App 时,系统会尝试直接交给 Omni Widgets;未安装或系统未接管时,会回退到文档站下载页。

AppLink 基础地址:

https://omni.2f0.cn/ho/app/

运行卡片

OmniWidgets://run-widget/<卡片 ID>?city=Shanghai&count=10

打开后会运行这张卡片已经保存的逻辑。URL 只能选择本地卡片,不能把任意代码放进 URL 执行。

对应的 AppLink:

https://omni.2f0.cn/ho/app/run-widget/<卡片 ID>?city=Shanghai&count=10

查询参数会注入到 $params:

const city = $params.city || "Beijing"
const count = Number($params.count || 0)

Config.set("lastCity", city)
console.log("run from url", city, count)
不会自动刷新卡片

run-widget 默认只运行卡片逻辑。Config.set()FileManager.write() 等结果会保存,但桌面 / 锁屏卡片不会立刻重绘;等下次刷新时才会显示新结果。

获取当前卡片链接

console.log(Widget.id)
console.log(Widget.name)
console.log(Widget.kind)
console.log(Widget.dimension)
console.log(Widget.urlscheme)

Widget.urlscheme 会返回当前卡片的运行链接:

const url = Widget.urlscheme + "?source=button"
Widget.openUrl(url)

控制闪控球

OmniWidgets://floating-ball/start
OmniWidgets://floating-ball/stop
OmniWidgets://floating-ball/toggle
URL说明
OmniWidgets://floating-ball/start启动闪控球
OmniWidgets://floating-ball/stop停止闪控球
OmniWidgets://floating-ball/toggle已启动则停止,未启动则启动

首次启动可能会弹出系统授权。拒绝后不会启动闪控球。

对应的 AppLink:

https://omni.2f0.cn/ho/app/floating-ball/start
https://omni.2f0.cn/ho/app/floating-ball/stop
https://omni.2f0.cn/ho/app/floating-ball/toggle

打开指定应用

OmniWidgets://open-app/<应用包名>?ability=EntryAbility
OmniWidgets://open-app/<应用包名>?ability=EntryAbility&module=entry

打开应用需要提供应用包名和 ability。只有目标应用还需要模块名时,再加 module

卡片逻辑里也可以这样打开:

Widget.openUrl("OmniWidgets://open-app/com.huawei.hmos.calendar?ability=MainAbility")

对应的 AppLink:

https://omni.2f0.cn/ho/app/open-app/com.huawei.hmos.calendar?ability=MainAbility

速查

OmniWidgets://run-widget/<widgetId>
OmniWidgets://run-widget/<widgetId>?key=value

OmniWidgets://floating-ball/start
OmniWidgets://floating-ball/stop
OmniWidgets://floating-ball/toggle

OmniWidgets://open-app/<bundleName>?ability=EntryAbility
OmniWidgets://open-app/<bundleName>?ability=EntryAbility&module=entry

https://omni.2f0.cn/ho/app/run-widget/<widgetId>?key=value
https://omni.2f0.cn/ho/app/floating-ball/start
https://omni.2f0.cn/ho/app/floating-ball/stop
https://omni.2f0.cn/ho/app/floating-ball/toggle
https://omni.2f0.cn/ho/app/open-app/<bundleName>?ability=EntryAbility
https://omni.2f0.cn/ho/app/open-app/<bundleName>?ability=EntryAbility&module=entry

注意事项

  • query 参数值在 $params 里都是字符串。
  • 重复参数名以后面的值为准。
  • 找不到卡片、运行报错或超时时,结果会写入最近一次输出和日志。
  • AppLink 未被系统接管时,会打开文档站下载页。
  • 运行卡片、目标应用或闪控球动作不存在时,App 内会显示最近一次外部调用结果。