一种html脚本启动androidapp指定界面的方法与流程

文档序号:17695120发布日期:2019-05-17 21:25阅读:583来源:国知局
一种html脚本启动android app指定界面的方法与流程

本发明涉及互联网技术领域,具体涉及一种html脚本启动androidapp指定界面的方法。



背景技术:

随着产品的不断迭代,应用的html5端与app端间良好的交互体验要求也越来越高,在使用过程中经常的会出现从html5端打开app端的登录界面或者注册界面。而android系统规定,界面要让其它html5端访问就必须要配置一套对外可以访问的协议标准。

传统的定义方式就出现了问题:html5端在新迭代的需求中需要打开app端的目标界面,但app端并没有提供这个功能,这个时候就需要对app端进行同步修改,重新打包发布到市场。但这样会影响了新版本的发布进度,而且有时功能需要,还强制用户更新,也影响了用户体验。同时当html5端调用的界面越多,app端就要有更多的界面需要进行配置,虽然此技术不难,但相当繁琐,影响了开发的效率。

有鉴于此,本发明人针对html5端与androidapp端之间交互存在的问题与缺陷,而深入构思且积极研发,进而产生本发明。



技术实现要素:

本发明的目的在于提供一种html脚本启动androidapp指定界面的方法,其可以减少html端打开app端界面时的重复定义协议标准的工作,从而提高工作效率。

为实现上述目的,本发明采用的技术方案是:

一种html脚本启动androidapp指定界面的方法,其包括以下步骤:

步骤1、在androidmanifest.xml清单文件中注册一个对外可被调用的activity界面统一入口,并定义相应的调用协议标准;

步骤2、html5界面根据android规范调用定义的协议,传入将要调用的界面路径来启动这个activity界面;

步骤3、利用动态代理的方式,代理系统出界面管理类的本地binder对象,并拦截界面管理接口的启动方法;

步骤4、在拦截的界面管理接口的启动方法时,判断启动方法中是否包含启动界面,当启动方法中包含启动界面时,将目标界面的intent替换成已注册的activity界面的intent;

步骤5、拦截界面线程类的成员变量mh的线程对象消息传递方法的第一个启动界面对象;并对界面线程类中的线程对象进行动态代理,替换真正要启动的intent。

所述步骤1中,调用协议标准为:scheme://userinfo@host:port/path?query#fragment,其中,scheme是协议名称,userinfo@是用户信息,,host为包名,port为端口号,path是路径,query#fragment为需要传递的参数。

所述步骤3具体如下:

通过java的动态代理,来将系统界面管理类的所有方法拦截下来,然后其修改参数,通过不断的反射,最终获取到本地界面管理类的成员变量的默认变量,该默认变量即为本地binder对象;

获取到本地binder对象之后,通过动态代理构造一个代理对象,将界面管理类接口的所有启动方法都实现出来,那么,系统调用所有界面管理接口的启动方法时,就拦截到所有界面管理接口的启动方法。

采用上述方案后,本发明利用android系统层会提供接口的形式来实现一些回调操作,通过反射去获取持有接口引用的对象,然后将所要启动的界面路径替换原有的对象,这样android系统调用接口的时候,调用替换过的对象,就能达到实现从html脚本启动androidapp指定界面的目的。本发明的方法可以减少html端打开app端界面时的重复定义协议标准的工作,从而提高工作效率。

附图说明

图1为本发明的工作流程示意图。

具体实施方式

如图1所示,本发明揭示了一种html脚本启动androidapp指定界面的方法,具体包括以下步骤:

步骤1、在androidmanifest.xml清单文件中注册一个对外可被调用的activity界面统一入口,并定义相应的调用协议标准。该调用协议标准为:scheme://userinfo@host:port/path?query#fragment,其中,scheme是协议名称,userinfo@是用户信息,可以省略,host可以定义为包名,port为端口号,path是路径,query#fragment即为需要传递的参数。

步骤2、html5界面根据android规范调用定义的协议,传入将要调用的界面路径来启动这个activity界面。

步骤3、利用动态代理的方式,代理系统出界面管理类(android.app.iactivitymanager)的本地binder对象,并拦截界面管理接口的启动方法(startactivity)。

具体地,通过java的动态代理,来将系统界面管理类(android.app.iactivitymanager)的所有方法拦截下来,然后去修改参数,通过不断的反射,最终获取到本地界面管理类(activitymanagernative)的成员变量的默认变量(gdefault),该默认变量(gdefault)实际上是一个activitymanagerproxy界面管理代理对象即本地binder对象,最终的binder跨进程通信在应用上都是通过它当中调用去完成的。

获取到本地binder对象之后,我们就通过动态代理构造一个代理对象,将界面管理类接口(iactivitymanager)的所有启动方法(startactivity)都实现出来,那么,系统调用所有界面管理接口(iactivitymanager)的启动方法(startactivity)时,都可以拦截到。

步骤4、将目标界面(activity)的intent替换成已注册的activity的intent,并将目标界面activity的intent带过去。

在拦截的界面管理接口的启动方法时,判断启动方法中是否包含启动界面,当启动方法中包含启动界面时,把构造的一个intent意图放进去,这个intent意图也带了要启动的目标界面activity,它的componentname组件名称就是在manifest清单文件中中注册的activity界面。

步骤5、拦截界面线程类(activitythread)的成员变量mh的线程对象消息传递方法(handlemessage)的第一个启动界面对象(caselaunch_activity);并对界面线程类(activitythread)中的线程对象(handle)进行动态代理,替换真正要启动的intent。

以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。



技术特征:

技术总结
本发明涉及一种html脚本启动android app指定界面的方法,其利用android系统层会提供接口的形式来实现一些回调操作,通过反射去获取持有接口引用的对象,然后将所要启动的界面路径替换原有的对象,这样android系统调用接口的时候,调用替换过的对象,就能达到实现从html脚本启动android app指定界面的目的。本发明的方法可以减少html端打开app端界面时的重复定义协议标准的工作,从而提高工作效率。

技术研发人员:庄明彬;张建宁
受保护的技术使用者:南威软件股份有限公司
技术研发日:2019.01.31
技术公布日:2019.05.17
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1