# LaunchWxaApp

建议使用 WMPFMiniProgramApi.launchMiniProgramWMPFMiniProgramApi.warmUpApp 接口.

用于拉起某个小程序

# 调用参数

属性 说明 最低版本
appId 小程序的 appId
isNativeView 无意义,请忽略
path 要启动的小程序的页面路径
appType 0: 正式版 1: 开发版/测试版 2: 体验版
forceRequestFullscreen 强制小程序全屏运行,默认 false。
landscapeMode 见下表 WMPF 1.0.1
enterPictureInPicture 进入画中画模式,默认 false。画中画模式需要接入方的 ROM 支持,支持方式参考:https://source.android.google.cn/devices/tech/display/pip?hl=zh-cn
displayId 从 Android DisplayManager 中获取到的 displayId,用于指定小程序显示的屏幕。在某些双屏设备上有用 WMPF 1.0.4
isForPreWarmLaunch 使用预热模式,默认 false。预热模式下,小程序会在后台启动小程序并一直存活,以达到下次启动时无需初始化的效果。预热模式下只有 appId / path / appType / displayId 会生效,传入特定的 displayId 可以做到用指定屏幕的宽高来测量小程序的渲染内容 WMPF 1.0.4

LandscapeMode

枚举值 说明
0 默认展示方式,与微信客户端保持一致
1 适用于强制横屏,且无法转动屏幕的设备(比如车机)
2 兼容模式,小程序内容将强制 WMPFUiApi.setWindowRatio 设置的比例显示(声明了resizable=true的小程序除外)
3 强制兼容模式(声明了resizable=true的小程序也不例外)

# 返回参数

无参数

# 示例代码

val request = WMPFLaunchWxaAppRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()
// Launch target(wxa appId)
// WARNING: hostAppIds and wxaAppIds are binded sets.
request.appId = launchAppId // 填入小程序AppId, 且需要与hostAppId有绑定关系
request.path = path
request.appType = appType // 0-正式版 1-开发版 2-体验版
// mayRunInLandscapeCompatMode Deprecated
// request.mayRunInLandscapeCompatMode = true
request.forceRequestFullscreen = false
request.landscapeMode = 2 
request.displayId = 0 // 小程序想要显示的目标displayId,适用于某些双屏设备 DisplayManager.getDisplays()[0].getDisplayId()
Log.i(
    TAG, "launchWxaApp: appId = " + launchAppId + ", hostAppID = " +
            BuildConfig.HOST_APPID + ", deviceId = " + DeviceInfo.deviceId
)
val result =
    WMPFIPCInvoker.invokeAsync<IPCInvokerTask_LaunchWxaApp, WMPFLaunchWxaAppRequest,
            WMPFLaunchWxaAppResponse>(
        request,
        IPCInvokerTask_LaunchWxaApp::class.java
    ) { response ->
        if (isSuccess(response)) {
            it.onSuccess(response)
        } else {
            it.onError(TaskErrorException(createTaskError(response)))
        }
    }

if (!result) {
    it.onError(Exception("invoke launchWxaApp fail"))
}

# 注意

  • 如果调用超时,未响应。一般是 WMPF Service 未正确启动,导致无法响应,可监听 IPCInvokeCallbackEx 相关 error 。
  • 如果弹窗提示 Error Loading WxaAttrs,请确认
    • 可能打开正式版(appType==0),但小程序没有发布过正式版本。小程序正式上线前请根据需要使用 1(开发版)或 2(体验版)。
    • 可能打开开发版(appType==1),但 WMPF 端未扫码登录,或登录用户无开发版权限,或该用户未在工具上上传开发版。
    • 可能打开体验版(appType==2),但 WMPF 端未扫码登录,或登录用户无体验版权限,或小程序当前无体验版。
  • 如果弹窗提示 err:TRANSFER, errCode:-3,一般是当前移动应用无打开对应小程序的权限,请确认