scheme调起App及传参的问题汇总
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scheme调起App及传参的问题汇总相关的知识,希望对你有一定的参考价值。
参考技术A 首先咱们看看scheme的协议格式:scheme://host:8080/path?query1=1&query2=true
● scheme 代表Scheme协议名称
● host 代表Scheme作用的地址域
● 8080 代表改路径的端口号
● path 代表的是指定页面(路径)
● query1 和 query2 代表传递的两个参数
废话不多说,直接正文
新建一个过渡Activity,用于接收从H5传递过来的参数,如图:
不然无法正常调起App,也无法接收到参数。根据自己的业务需求,有的人不喜欢新建更多的类,也可以把下面的intent-filter标签中的内容放在启动页接收,如果放在启动页,要区分开android.intent.category.LAUNCHER和android.intent.action.VIEW,放在两个intent-filter里面就行。有的人只有一个host,或者想写死host,那就直接在data标签中添加host的值就行。
图2为启动意图设置在启动页上的截图
图3为接收的方式,在自定义的SchemeActivity中接收URL传来的参数,所有的业务逻辑可以放在自己想要处理的地方,可以根据后台给的host处理不同的业务逻辑。
1、scheme中的内容必须和H5定义的协议名称一样。
2、要区分开android.intent.category.LAUNCHER和android.intent.action.VIEW两个意图,不能将两个合并为一个intent-filter,如图2.
3、本人碰到过一个奇葩问题,H5系统自带的Dialog无法正常调起App并传递参数,如果碰到了需要自定义。
4、有的手机浏览器默认会把链接字符转成小写字符,比如 myApp://host.....放入浏览器中会变成myapp://host....
1、App没有启动时,通过scheme协议调起App,栈中时什么状态
2、App已经启动了,并且处于后台状态,调起App,栈中的顺序是什么
问题1:当App没有启动时,浏览器调起App是直接把调起的页面添加到浏览器的task中(默认是已FLAG_ACTIVITY_NEW_TASK的方式启动),所以用户会有种感觉,当按返回键的时候可以直接返回到浏览器页面,而不是直接返回到App首页。这就有个问题URL启动的Activity和应用启动的Activity如何存在同一个堆栈中?可以配置一个taskAffinity属性,约束URL启动的Activity与应用自身的启动的Activity在同一个堆栈中,(不光设置这个属性,要配合SingleTask)这就涉及到了Android的启动模式。网上搜,一堆。
问题2:使用URL的方式唤起应用B的Activity时,可能存在应用B的Activity启动了,但是堆栈仍然在后台的现象,用户看起来的感觉就是,我点击链接跳到了App,就像启动了一个新的App一样,即应用B的Activity没有聚焦的问题。网上有的人说使用如下方法可以解决:
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_WITH_HOME);
这种方法仅仅针对你知道你要启动的页面,主动将Activity对应的堆栈移动到顶端,如果页面多了,添加起来也麻烦,麻烦大神指点一二。
待更新。。。
以上是关于scheme调起App及传参的问题汇总的主要内容,如果未能解决你的问题,请参考以下文章