背景
项目需要,想在uniapp页面内通过一个点击事件跳转到安卓原生页面。百度没找到解决办法。
分析
- 要实现跳转原生必须要得到Activity的控制权,就是要继承框架二次封装的Activity基类。
- 有了Activity控制权后需要在uniapp通过js拿到Activity的实例。
- 有了实例后再通过自定义方法跳转Activity。
资料
- 自定义Activity继承
PandoraEntryActivity
- 这里还有一个细节需要手动处理:uniapp的启动流程是先进入
PandoraEntry
,再到PandoraEntryActivity
的,这里PandoraEntry
跳转的页面默认是PandoraEntryActivity
,所以我们需要自定义一个入口让他跳转到我们自己的MainActivity
。
- 自定义的
Entry
入口类中需要传入一个__start_from_to_class__
的intent参数才能让PandoraEntry
跳转到自定义的主活动页。
- 不建议在自定义的
Entry
类中直接跳转MainActivity
,因为PandoraEntry
可能有一些初始化动作。
plus.android.runtimeMainActivity()
可以直接拿到当前的Activity实例,uniapp页面中一般都只在主活动中,很少跳转到其他活动。
- 安卓原生通过
Intent
可以实现页面跳转。
完整代码
manifest也要修改,相关保密字串用xxx代替:
uniapp中:
踩坑
如果需要调试原生页面的话,肯定需要直接运行到手机的,但是每次直接运行打开都会提示未配置appkey或配置错误
导致进不了应用。这个问题其实是因为Android Studio直接运行的时候会以debug运行,就是免签名运行,这样会使uniapp框架识别不到我们配置的appid,所以会出现上述问题。解决办法很简单:
不要尝试通过配置uniapp框架来跳过appkey验证,我没有发现更好的uniapp配置办法。
2022-02-09后续,单独继承跳转不可靠,在退出应用时会回到第一屏,这时候的第一屏是无ui状态,会黑屏,需要另寻方案。