# WMPFMiniProgramApi.launchMiniProgram

需 WMPF >= 2.1.0 支持,使用前建议阅读注意事项

启动小程序。

# 调用参数

参数 必填 类型 说明 最低版本
params 是 WMPFStartAppParams 启动小程序参数
forceFullscreen 否 boolean 是否强制全屏显示
landscapeMode 否 LandscapeMode 启动小程序展示方式

或

参数 必填 类型 说明 最低版本
request 是 WMPFStartAppRequest 启动小程序参数(完整版) 2.2.0

# WMPFStartAppParams

属性 必填 类型 说明 最低版本
appId 是 String 小程序 AppId。需在微信硬件平台上和 hostAppId 绑定过
path 否 String 小程序启动页面路径,不填则为小程序首页
appType 是 WMPFAppType 小程序类型,可选择正式版、体验版、开发版

# WMPFAppType

枚举值 说明
APP_TYPE_RELEASE 正式版小程序
APP_TYPE_DEV 开发版小程序,需要登录用户具备小程序开发权限
APP_TYPE_EXP 体验版小程序,需要登录用户具备小程序体验权限

# LandscapeMode

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

# DisplayMode

枚举值 说明
NORMAL 默认展示方式,与微信客户端保持一致(小程序显示状态栏和导航栏、小游戏全屏显示)
FULLSCREEN 全屏显示(隐藏状态栏和导航栏)
HIDE_STATUS_BAR 只隐藏状态栏
HIDE_NAVIGATION_BAR 只隐藏导航栏

# WMPFStartAppRequest

属性 必填 类型 说明 最低版本
params 是 WMPFStartAppParams 启动小程序参数
forceFullscreen 否 boolean 是否强制全屏显(已废弃,改用 displayMode)
landscapeMode 否 LandscapeMode 启动小程序展示方式
displayId 否 int 从 Android DisplayManager 中获取到的 displayId,用于指定小程序显示的屏幕。在双屏设备、将小程序嵌入屏幕指定区域可用。
enterPictureInPicture 否 boolean 进入画中画模式,默认 false。画中画模式需要接入方的 ROM 支持,支持方式参考:https://source.android.google.cn/devices/tech/display/pip?hl=zh-cn
zoom 否 float 小程序缩放 2.3.0
ratio 否 float 兼容模式下小程序的高宽比,默认为屏幕长边比上屏幕短边 2.3.0
processId 否 String 【实验性接口,未来可能被废弃】指定小程序运行在 WMPF 的某个 container 进程上,配合 WMPFUiApi.setZoomForProcess 使用。 2.3.0
suspendTimeout 否 int 小程序在后台运行指定秒数后暂停 2.3.0
suicideTimeout 否 int 小程序在后台被暂停指定秒数后结束进程 2.3.0
forceIndexNoRelaunch 否 boolean 设置为 true 时,若小程序已启动且 params.path 为空,将不会跳转页面;设置为 false 时,将跳转到小程序首页 2.3.0
disableOpenAnimation 否 boolean 禁用小程序自带的弹出动画。适合不需要小程序从底下向上弹出动画的场景。 2.3.0
displayMode 否 DisplayMode 指定小程序系统状态栏、导航栏显示模式或全屏。 2.3.0
usingAllowList 否 boolean 只打开小程序列表内的小程序。对于不在小程序列表内的小程序,提示用户无法打开。 2.4.0
floatWindow 否 boolean 使用悬浮窗模式打开小程序 2.4.0
specific 否 WMPFFloatWindowSpecific 小程序浮窗模式,设置小程序 Activity 的 Window 参数,可以将小程序显示到屏幕的某个子区域且区域外透明 2.4.0

# WMPFFloatWindowSpecific

悬浮窗小程序是在 Android 系统内通过 WindowManager.addView 的方式创建的悬浮窗内显示小程序的形态。 悬浮窗小程序的 orientation 和系统屏幕 Display 的 orientation 无关,由小程序自身状态控制(小程序全屏播放视频时会变换到横屏悬浮窗,此时手机/车机屏幕可能还是竖屏显示状态)。

属性 必填 类型 说明 最低版本
landscapeWidth 是 int 横屏悬浮窗宽度,单位 px 2.1.0
landscapeHeight 是 int 横屏悬浮窗高度,单位 px 2.1.0
portraitWidth 是 int 竖屏悬浮窗宽度,单位 px 2.1.0
portraitHeight 是 int 竖屏悬浮窗高度,单位 px 2.1.0
initOrientation/orientation 否 int 悬浮窗初始方向,默认为竖屏 2.1.0
requestFocus 否 boolean 悬浮窗是否申请焦点,默认 true 2.1.0
portraitSpec 是 WMPFFloatWindowOrientationSpecific 竖屏悬浮窗配置 2.4.0
landscapeSpec 是 WMPFFloatWindowOrientationSpecific 横屏悬浮窗配置 2.4.0
cornerRadius 否 float 悬浮窗圆角大小 2.1.0
layer 否 int 悬浮窗层级,值与 WindowManager.LayoutParams.type 对应,默认值为 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 2.4.0
preserveLocation 否 悬浮窗是否保存位置。若保存位置,则本次启动小程序传入的 x、y 将无效,使用原来在后台的悬浮窗小程序被关闭前的坐标。(注意,如果悬浮窗小程序被杀,将不会记录坐标) 2.4.0
closedOnTouchOutside 否 boolean 点击悬浮窗外侧是否自动关闭悬浮窗。 2.4.0

# WMPFFloatWindowOrientationSpecific

悬浮窗横屏或者竖屏的配置。

属性 必填 类型 说明 最低版本
width 是 int 悬浮窗宽度(单位 px) 2.4.0
height 是 int 悬浮窗高度(单位 px) 2.4.0
x 否 int 窗口 x 坐标(单位 px) 2.4.0
y 否 int 窗口 y 坐标(单位 px) 2.4.0
gravity 否 int 悬浮窗 WindowManager.LayoutParams#gravity。 2.4.0
fixedLocations 否 int 浮窗小程序吸附位置,设置后浮窗小程序被拖动后会吸附在最近的指定位置。 2.4.0
dragAreaHeight 否 int 悬浮窗拖拽区域高度,单位 px。 2.4.0
dragBarSize 否 int 悬浮窗拖拽条宽高,单位 px。 2.4.0
dragBarMarginTop 否 int 悬浮窗拖拽条上边距。默认值为 -1,表示上下居中。适用于悬浮窗拖拽条在 dragArea 中不是上下居中的情况。 2.4.0
dragBarDayColor 否 int 悬浮窗拖拽条浅色(日间)模式颜色 ARGB。浅色模式下默认为黑色。 2.4.0
dragBarNightColor 否 int 悬浮窗拖拽条深色(夜间)模式颜色 ARGB。深色模式下默认为白色。 2.4.0
layoutInScreen 否 int 悬浮窗是否在屏幕内布局,而不是在可用区域(即除导航栏状态栏外的区域)内布局。 2.4.0
draggableHorizontally 否 int 是否允许悬浮窗横向拖动 2.4.0
draggableVertically 否 int 是否允许悬浮窗纵向拖动 2.4.0
layoutNoLimits 否 boolean 是否允许悬浮窗部分移动到屏幕外。建议配合 fixedLocation 使用,允许用户拖动悬浮窗到屏幕外后自动吸附到最近的位置。对应 WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS。 2.4.0

# 返回参数

无

# 示例代码

val miniProgramApi = WMPF.getInstance().getMiniProgramApi()
miniProgramApi.launchMiniProgram(WMPFStartAppParams(
    appId="wxe5f52902cf4de896",
    path="",
    appType=WMPFAppType.APP_TYPE_RELEASE
))

miniProgramApi.launchMiniProgram(WMPFStartAppRequest(WMPFStartAppParams(
    appId="wxe5f52902cf4de896",
    path="",
    appType=WMPFAppType.APP_TYPE_RELEASE
)).apply {
  floatWindow = true
  specific = WMPFFloatWindowSpecific(800, 1000, 1000, 800, 15, 0, 0, true)
})

# 注意

  • WMPF 需要有后台弹出页面权限。
  • 对于体验版和开发版小程序,WMPF 必须要先用户登录之后,且登录的用户具备小程序体验版或者开发版打开权限才能正常打开。
  • 如果弹窗提示 Error Loading WxaAttrs,请确认
    • 可能打开正式版(appType==0),但小程序没有发布过正式版本。小程序正式上线前请根据需要使用 1(开发版)或 2(体验版)。
    • 可能打开开发版(appType==1),但 WMPF 端未扫码登录,或登录用户无开发版权限,或该用户未在工具上上传开发版。
    • 可能打开体验版(appType==2),但 WMPF 端未扫码登录,或登录用户无体验版权限,或小程序当前无体验版。
  • 如果弹窗提示 err:TRANSFER, errCode:-3,一般是当前移动应用无打开对应小程序的权限,请确认