# LaunchWxaApp

> 建议使用 [WMPFMiniProgramApi.launchMiniProgram](/doc/oplatform/Miniprogram_Frame/api/cli/miniprogram/launchMiniProgram) 或 [WMPFMiniProgramApi.warmUpApp](/doc/oplatform/Miniprogram_Frame/api/cli/miniprogram/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的小程序也不例外）                                                   |


## 返回参数

无参数

## 示例代码

```kotlin
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(
        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`，一般是当前移动应用无打开对应小程序的权限，请确认
  - 已在「微信终端合作平台」上[「绑定移动应用和小程序」](/doc/oplatform/Miniprogram_Frame/bind-app)
  - [激活设备](ActivateDevice)时，传入了正确的 hostAppId
