Host API 参考
ThirdpartyApp 接口
管理和启动设备上的第三方快应用。
接口定义
interface thirdpartyapp {
record app-info {
package-name: string,
fingerprint: list<u32>,
version-code: u32,
can-remove: bool,
app-name: string
}
launch-qa: func(addr: string, app-info: app-info, page-name: string) -> future<result>;
get-thirdparty-app-list: func(addr: string) -> future<result<list<app-info>>>;
}类型
app-info
package-name:包名。fingerprint:签名指纹。version-code:版本号。can-remove:是否允许卸载。app-name:应用名称。
函数
launch-qa
- 参数:
addr: string设备地址。app-info: app-info目标应用信息。page-name: string目标页面。
- 返回:
future<result>。
get-thirdparty-app-list
- 参数:
addr: string设备地址。 - 返回:
future<result<list<app-info>>>。 - 说明:成功时返回应用列表;失败时返回
Err(())。
权限要求
- 这组接口都会触发
thirdpartyapp权限校验。 - 如果插件未声明
thirdpartyapp,或用户拒绝授权,会返回Err(())。
注意事项
get-thirdparty-app-list当前会通过设备侧ResourceSystem主动请求快应用列表,并等待设备回包。- 如果设备不存在、资源系统不可用、或者设备没有按预期回包,会返回
Err(())。 launch-qa会优先使用你传入的app-info;如果package-name有值但fingerprint为空,宿主会尝试从当前设备已安装应用里按包名补全签名信息。- 如果
package-name为空,或者目标设备上找不到对应应用,launch-qa会返回Err(())。
示例
use crate::astrobox::psys_host;
pub async fn launch_first_app(addr: &str) -> Result<(), ()> {
let ret = psys_host::thirdpartyapp::get_thirdparty_app_list(addr).await;
let apps = ret?;
let Some(app) = apps.into_iter().next() else {
return Ok(());
};
psys_host::thirdpartyapp::launch_qa(addr, &app, "pages/index").await
}