CN112667482A - 业务功能调用方法、移动终端和存储介质 - Google Patents
业务功能调用方法、移动终端和存储介质 Download PDFInfo
- Publication number
- CN112667482A CN112667482A CN202011643830.8A CN202011643830A CN112667482A CN 112667482 A CN112667482 A CN 112667482A CN 202011643830 A CN202011643830 A CN 202011643830A CN 112667482 A CN112667482 A CN 112667482A
- Authority
- CN
- China
- Prior art keywords
- native
- calling
- terminal
- protocol
- character string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Telephone Function (AREA)
Abstract
本申请实施例提供一种业务功能调用方法、移动终端和存储介质,该方法应用于移动终端,移动终端的操作系统是Android,方法包括:通过JavaScript脚本监听在H5端触发的JavaScript事件;通过JavaScript脚本根据JavaScript事件对应的原始地址,生成协议字符串,以使原生端能够监听到JavaScript事件对应的调用跳转事件,并对协议字符串进行解析,协议字符串的格式符合H5端与原生端之间预先约定的scheme协议要求;调用原生端根据协议字符串中携带的原生调用信息,执行原生调用信息对应的原生业务功能。以此可以改善目前现有的业务功能调用处理方式较为单一的问题。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种业务功能调用方法、移动终端和存储介质。
背景技术
目前,移动终端的移动应用(Application,简称App)开发模式主要有三种:原生应用(Native App,)、网页应用(Web App)、混合模式移动应用(Hybrid App)。
网页应用通常采用H5页面进行显示。HTML的英文全称为HyperText MarkupLanguage,中文全称为超文本标记语言。
传统原生应用开发存在开发成本高、无法跨平台(针对Android和iOS平台需要分别开发不同平台使用的代码)、开发效率低、上线成本高、推广成本高(需要用户下载)等劣势。
基于HTML5(简称H5)技术的兴起,使得网页应用开发得到更多的发展机会。虽然网页应用开发和维护成本都比较低,可以跨平台使用,但是目前的功能较弱。
因此,衍生出了Hybrid混合开发模式,以帮助用户实现多端代码复用(除了Android和iOS,PC端或者小程序也可以复用),并进行快速迭代。目前市场上的主流移动应用大多基于Hybrid混合开发模式进行开发。
Hybrid App是在Hybrid混合开发模式下得到的产品,是指介于原生应用、网页应用这两者之间的App,虽然外表上看起来是一个Native App,但实际上访问的是一个WebApp,兼具了“Native App良好用户交互体验优势”和“Web App跨平台开发的优势”。
Hybrid混合开发模式的主要实现原理是:借助原生端的WebView(网页视图)作为容器,内嵌H5页面进行展示,但是由于H5的功能和权限有限,因此需要通过调用原生端的原生业务功能来获取更多能力或权限。
在现有的Hybrid混合开发模式下,开发者往往通过原生应用的官方发布平台所提供的调用方式来实现H5端与原生端之间的调用交互。例如,当需要以H5端的代码调用Android原生端的代码,从而调用移动终端的原生业务功能时,通常是基于Android官方平台提供的方式实现:往WebView中注入Java对象,H5端通过注入的Java对象来调用移动终端的底层原生能力(例如,获取移动终端上的某个传感器的一条数据)。因此,处理方式较为单一。
发明内容
本申请的目的在于提供一种业务功能调用方法、移动终端和存储介质,可以改善目前现有的业务功能调用处理方式较为单一的问题。
第一方面,本申请实施例提供一种业务功能调用方法,应用于移动终端,所述移动终端的操作系统是Android,所述方法包括:
通过JavaScript脚本监听在H5端触发的JavaScript事件;
通过所述JavaScript脚本根据所述JavaScript事件对应的原始地址,生成协议字符串,以使原生端能够监听到所述JavaScript事件对应的调用跳转事件,并对所述协议字符串进行解析,所述协议字符串的格式符合所述H5端与原生端之间预先约定的scheme协议要求;
调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能。
在上述方法中,可以通过监听H5端触发的JavaScript事件,并生成符合预设协议要求的协议字符串,使得原生端能够监听到JavaScript事件对应的调用跳转事件,并对协议字符串进行解析,基于此调用原生端来执行协议字符串中携带的原生调用信息所对应的原生业务功能,无需用户自行书写大量复杂的数据,可以快速实现H5端对于原生端的功能调用,丰富了在H5端对于Android原生能力的调用处理方式,丰富了H5端与原生端之间的交互方式。
在可选的实施方式中,在所述生成协议字符串之前,所述方法还包括:
通过所述JavaScript脚本向window对象写入回调信息;
所述生成协议字符串,包括:生成携带所述回调信息的协议字符串;
在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之后,所述方法还包括:
通过所述回调信息对应的回调方法,将所述原生端执行完所述原生业务功能之后得到的执行结果发送给所述H5端。
通过上述实现方式,在Hybrid混合开发模式下,支持Android原生代码与内嵌H5代码之间相互调用时,在交互过程中传入回调信息,相较于向WebView中注入Java对象以实现H5对于原生代码进行调用的方式,上述实现方式改善了现有方式的用户书写过程繁琐且不支持回调的问题。
在可选的实施方式中,在所述生成协议字符串之后,所述方法还包括:
通过所述JavaScript脚本将所述JavaScript事件对应的原始地址更改为所述协议字符串对应的跳转地址,以使所述原生端能够监听到所述JavaScript事件对应的调用跳转事件,并对所述协议字符串进行解析。
通过上述实现方式,实现了JavaScript在H5端的访问地址跳转,可以使得在H5端触发的事件能够被Android原生端进行监听拦截,有利于H5端对于原生端的快速调用。
在可选的实施方式中,在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之前,所述方法还包括:
在从所述协议字符串的首部位置识别到指定的唯一标识符时,通过网页视图WebView控件拦截所述JavaScript事件对应的调用跳转事件,并从所述协议字符串中提取所述原生调用信息;
所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
根据提取到的所述原生调用信息,调用所述原生端执行所述原生调用信息对应的原生业务功能。
通过上述实现方式,基于生成的协议字符串的内容实现对于原生端的调用,原生端可直接根据协议字符串中携带的原生调用信息执行对应的原生业务功能,易用性和稳定性较高。
在可选的实施方式中,所述网页视图WebView控件中注入有WebChromeClient对象,所述通过网页视图WebView控件拦截所述JavaScript事件对应的调用跳转事件,包括:
通过重写所述WebChromeClient对象的shouldOverrideUrlLoading方法来拦截URL SCHEME事件;
或,通过重写所述WebChromeClient对象的onJsPrompt方法来拦截window对象的prompt事件;
或,通过重写所述WebChromeClient对象的onJsAlert方法来拦截alert事件。
通过上述实现方式,丰富了在H5端调用原生端时的事件拦截方式,提升了调用过程的易用性和稳定性。
在可选的实施方式中,所述原生调用信息中包括原生调用方法以及所述原生调用方法对应的json参数,所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
调用所述原生端根据所述json参数和所述原生调用方法,执行与所述json参数和所述原生调用方法匹配的原生业务功能。
通过上述实现方式,原生端可直接根据协议字符串中携带的内容执行对应的功能,无需以额外的交互流程来传输在原生调用方法需要使用到的参数。
在可选的实施方式中,在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之前,所述方法还包括:
基于预先配置的软件开发工具包SDK所提供的函数注册功能和handlers对象,启用所述函数注册功能,向所述handlers对象中写入所述原生端能够被所述JavaScript脚本调用的至少一组所述原生调用信息,所述至少一组所述原生调用信息中的每组原生调用信息对应所述原生端提供的一个原生业务功能。
通过上述实现方式,可以向H5端提供丰富的原生业务功能,在完成注册写入的情况下,H5端可以对原生端已注册的任一种原生业务功能进行快捷调用,有利于在H5端满足用户的复杂业务需求。
在可选的实施方式中,在所述原生调用信息对应的原生业务功能为连拍功能时,所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
通过重写所述原生端提供的相机回调函数onPreviewFrame,截取所述原生端的摄像头获取的视频帧数据,并对获取的帧数据进行压缩编码转换,得到连拍结果;
或,调用所述原生端的原始拍照应用接口获取连拍结果。
通过上述实现方式,可以在H5端通过对于原生端的调用来实现连拍功能、数据压缩功能,相较于单次拍照,上述实现方式以简便的处理方式为网页应用提供了丰富的原生能力。其中,通过onPreviewFrame来实现连拍的方式可实现无卡顿连拍。
在可选的实施方式中,通过调用所述原生端执行的所述原生调用信息对应的原生业务功能包括以下至少一者:自定义时长的视频拍摄、以指定分辨率进行拍照、进行自定义强度的震动。
通过上述实现方式,可以满足用户在H5端的复杂业务需求,上述实现方式可以支持在H5页面内便捷地调用多种原生能力,无需用户在H5端耗费大量精力进行复杂的开发过程,在H5端即可调用原生的多种传感器(包括摄像头)的能力。
第二方面,本申请实施例提供一种移动终端,包括:
存储器;
处理器;
所述存储器上存储有所述处理器可执行的计算机程序,所述计算机程序被所述处理器执行时执行前述第一方面所述的方法。
第三方面,本申请实施例提供一种存储介质,所述存储介质上存储有处理器可执行的计算机程序,所述计算机程序被所述处理器执行时执行前述第一方面所述的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种业务功能调用方法的流程图。
图2为本申请实施例提供的一种业务功能调用方法的部分流程图。
图3为本申请实施例提供的另一种业务功能调用方法的部分流程图。
图4为本申请实施例提供的一种移动终端的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
目前,Android官方开发平台提供的一种H5端与原生端进行交互的方式是:在需要原生端调用H5端时,以原生端的WebView(网页视图)控件通过loadUrl或evaluateJavascript的调用方式来调用H5中的JavaScript脚本,而在需要H5端调用原生端的原生能力时,通过往WebView控件注入Java对象从而调用原生能力,在H5端与原生端的交互过程中,数据书写过程比较繁琐,并且只能调用极为少量的原生能力,无法满足复杂的业务需求,例如,这种处理方式不支持在交互过程中传入回调参数,只能同步等待执行(H5端会不知道原生功能是否被成功启用、也不知道被调用的原生功能什么时候被执行完)。
并且,现有的处理方式不支持以H5端调用原生端的方式来完成无卡顿连拍、自定义质量的图片压缩、自定义时长的视频录制等复杂的功能,一般只支持一次性数据读取等简单的能力。
而如果采用JsBride的开源库实现H5端对于原生端调用,由于该开源库已经很久没有得到维护,在接入该开源库时需要用户处理关于该开源库的很多历史问题,不便于用户使用,易用性和稳定性较低。
有鉴于此,发明人提出以下实施例,用于在Hybrid混合开发模式下,实现H5端与Android原生端之间的交互,用户可以在H5端调用原生端已注册的各种原生业务功能,可以在H5页面内便捷调用丰富的原生应用程序接口(Application Program Interface,Api),以在H5页面内利用丰富的原生能力满足用户的业务需求,例如,可以支持无卡顿连拍、自定义质量的图片压缩、自定义时长的视频录制等复杂的功能。在H5端调用原生端的过程中,以事件监听、拦截、协议处理的方式自动进行预处理,从而使得原生端根据协议字符串的内容执行对应的操作,以此为H5端提供原生能力,调用的易用性和稳定性较高。
请参阅图1,图1为本申请实施例提供的一种业务功能调用方法的流程图。该方法应用于移动终端,该移动终端的操作系统是Android。该移动终端可以是手机、平板电脑等能够安装混合模式移动应用(Hybrid App)的可移动设备。
如图1所示,该方法包括:步骤S11-S13。
S11:通过JavaScript脚本监听在H5端触发的JavaScript事件。
在S11之前,Android开发者可以向移动终端中导入软件开发工具包SDK,并对软件开发工具包SDK进行初始化。初始化过程中可以对SDK内部的JavaScript脚本进行初始化处理,以完成JavaScript脚本在移动终端的部署、原生端提供的各种原生业务功能的注册、H5端提供的各种回调方法的注册等初始化操作,以此使得部署完成的SDK能够为移动终端提供以H5端调用原生端的丰富原生业务功能的能力。在SDK被成功初始化,完成部署以后,通过调用SDK提供的JavaScript对象可以在H5端发起调用流程,传入调用过程中所用的各种数据,以便于原生端能够根据被传入的这些数据执行对应的原生业务功能,即,使得原生端根据H5端的调用来执行原生方法。
在本申请实施例中,H5端对于原生端的调用,本质上可以视为JavaScript代码对于Android原生代码的调用。
关于S11,JavaScript事件是可以被JavaScript脚本侦测到的行为,本申请实施例中可以视为发生在HTML元素上的事情,可以是浏览器行为,也可以是用户行为,例如,当用户在H5页面上对一些特定位置(这些特定位置设置有链接跳转功能)的按钮、链接、字符、图像进行点击或选中触发时,或者,在H5页面中弹出一些对话框、警示框时,JavaScript脚本可以监听在H5页面内触发的JavaScript事件。
H5页面中的每个元素都可以产生某些可以触发JavaScript函数的JavaScript事件,例如,在H5页面加载完成时、页面中的输入字段改变时、页面中的一些按钮被点击时、页面中的一些HTML元素被选中时、在H5页面环境下用户按下键盘中的某些按键时,都有可能在H5端触发能够被JavaScript脚本监听的JavaScript事件。
在JavaScript脚本根据监听到的JavaScript事件对应的触发类型或HTML元素确定当前H5端需要调用原生端的原生业务功能时,执行S12。示例性地,如果在H5页面内的“拍照”按钮被点击触发,可以视为H5端需要调用原生端的原生能力,如果在H5页面内的“获取当前位置”按钮被点击触发,也可以视为H5端需要调用原生端的原生能力。如果在H5页面内的“下一页”按钮被点击触发,并且下一页的内容(例如网络上公开的文档)与原生端的原生业务功能无关,可以视为H5端暂时不需要调用原生能力。
S12:通过JavaScript脚本根据JavaScript事件对应的原始地址,生成协议字符串,以使原生端能够监听到JavaScript事件对应的调用跳转事件,并对协议字符串进行解析,协议字符串的格式符合H5端与原生端之间预先约定的scheme协议要求。
其中,JavaScript事件对应的原始地址可以是:在发生该JavaScript事件时承载H5页面的显示内容的地址,例如,可以是基于HTTPS(Hyper Text Transfer Protocol overSecureSocket Layer)协议的地址。
在预先约定H5端与原生端之间的调用跳转协议scheme的情况下,例如,在SDK初始化过程中完成协议部署的情况下,在H5端需要调用原生端时,JavaScript脚本可生成符合该scheme协议要求的协议字符串。Scheme协议是一种页面跳转协议,通过定义该协议的内容,可以方便跳转到各种页面。
示例性地,约定的scheme协议的格式要求可以包括:唯一标识符+原生调用信息,还可以包括JavaScript回调信息(简称回调信息),即:唯一标识符+原生调用信息+JavaScript回调信息。
原生调用信息用于确定需要原生端提供什么样的服务、需要原生端执行什么样的原生业务功能。这些原生调用信息对应的原生业务功能是在初始化过程中就被注册过的。
其中,原生调用信息中包括原生调用方法,可以通过协议字符串中携带的原生方法名(handlerName)来代表需要调用的原生调用方法。
可选的,除了原生调用方法(handlerName)以外,原生调用信息中还可以包括该原生调用方法对应的json参数(data),该json参数是原生端执行该原生调用方法时需要参考或使用的数据。
JavaScript回调信息(callback),可用于提示原生端以怎样的方式回传执行原生业务功能后得到的数据,也可以用于原生端通知H5端在什么时候执行怎样的后续操作。在实际应用中,并非每一次都会涉及回调,具体是否需要回调功能与实际业务配置有关。在本申请实施例中提供的是可以在H5调用原生端的过程中一并传输回调信息的方式,而不是具体的回调内容。
其中,在识别到该唯一标识符开头的协议字符串时,可以提取该协议字符串的原生调用信息、JavaScript回调信息等内容,从而使得原生端这些被提取的信息执行对应的操作。
其中,在生成协议字符串之后,可通过JavaScript脚本将JavaScript事件对应的原始地址更改为协议字符串对应的跳转地址,以使原生端能够监听到JavaScript事件对应的调用跳转事件,并对协议字符串进行解析。
通过这一地址更改操作可以实现JavaScript脚本的协议处理,实现协议跳转,例如,从原始地址对应的HTTPS协议跳转到协议字符串对应的以唯一标识符开头的scheme协议。在前述生成的协议字符串符合H5端与原生端之间预先约定的scheme协议要求的情况下,例如符合前述的格式要求的情况下,Android原生端能够监听到JavaScript事件对应的调用跳转事件,可以对生成的协议字符串进行解析,提取协议字符串中的关键信息(原生调用信息、JavaScript回调信息等)。
通过上述的实现方式,实现了JavaScript在H5端的访问地址跳转,可以使得在H5端触发的事件能够被Android原生端进行监听拦截,有利于H5端对于原生端的快速调用。
S13:调用原生端根据协议字符串中携带的原生调用信息,执行原生调用信息对应的原生业务功能。
其中,如果协议字符串中携带的原生调用信息是已经注册过的,根据协议字符串中携带的原生调用信息即可确定需要调用原生端的什么原生业务功能。在原生端监听到JavaScript事件对应的调用跳转事件,并从协议字符串中提取到有效的原生调用信息的情况下,可执行该原生调用信息对应的原生业务功能。
下表1中示出了本申请实施例中提供的可以从H5端调用的一些原生业务功能。在表1中的各项原生方法名对应的原生业务功能完成初始化注册的情况下,通过前述S11-S13的方法,可以从H5页面中调用这些原生业务功能,通过调用原生端执行的原生调用信息对应的原生业务功能包括以下至少一者:获取地理位置信息、自定义时长的视频拍摄、获取陀螺仪信息、播放视频、播放音频、获取Android系统信息、选择照片、以指定分辨率进行拍照、关闭H5端的显示页面、获取加速度计信息、进行自定义强度的震动、获取剪切板信息等。以此可以满足用户在H5端的复杂业务需求,可以支持在H5页面内便捷地调用多种原生能力,无需用户在H5端耗费大量精力进行复杂的开发过程,在H5端即可调用原生的多种传感器(包括摄像头)的能力。其中,关于自定义的时长、分辨率、强度等可以由用户指定的信息,可以是在生成协议字符串之前由用户自行设置的。
需要说明的是,现有的调用方式可能在一些场景下支持获取地理位置信息、获取系统信息等简单的单次数据获取功能,但是现有技术中的H5端调用原生端的方式是不支持连拍、自定义拍照等复杂业务功能的。
表1-原生端提供给H5端的部分原生业务功能
通过上述S11-S13,可以通过监听H5端触发的JavaScript事件,并生成符合预设协议要求的协议字符串,使得原生端能够监听到JavaScript事件对应的调用跳转事件,并对协议字符串进行解析,基于此调用原生端来执行协议字符串中携带的原生调用信息所对应的原生业务功能,无需用户自行书写大量复杂的数据,可以快速实现H5端对于原生端的功能调用,丰富了在H5端对于Android原生能力的调用处理方式,丰富了H5端与原生端之间的交互方式。
可选的,在协议字符串中识别到的原生调用信息中包括原生调用方法以及原生调用方法对应的json参数的情况下,上述S13可包括:调用原生端根据json参数和原生调用方法,执行与json参数和原生调用方法匹配的原生业务功能。
示例性地,协议字符串中携带的与原生调用方法对应的json参数,用于指示原生端以哪种模式调用什么原生业务功能,例如,通过与原生调用方法对应的json参数,可用于确定进行几张图像的连拍、需要以哪种强度控制马达进行震动、需要拍摄多久的视频等。
通过上述的实现方式,原生端可直接根据协议字符串中携带的内容执行对应的功能,无需以额外的交互流程来传输在原生调用方法需要使用到的参数。
考虑到现有技术中以注入Java对象来实现H5端对原生端的调用处理方式,不支持回调,在本申请实施例中,可以通过协议处理来传递回调信息。
可选的,在生成协议字符串之前,如图2所示,上述的方法还可以包括:S21。
S21:通过JavaScript脚本向window对象写入回调信息。
其中,JavaScript脚本可以在监听到JavaScript事件时,根据该JavaScript事件的事件类型或属性来确定本次是否涉及回调。如果确定本次涉及回调,可以向全局window对象写入JavaScript回调信息。其中,这些回调信息对应的回调方法是预先被注册过的,是JavaScript脚本提供的可以被原生端、H5端识别到的回调方法。
基于S21,上述生成协议字符串的过程可以包括:S121。
S121:生成携带回调信息的协议字符串。
即,生成的协议字符串包括原始调用信息和回调信息。基于该协议字符串中携带的回调信息,在上述S13之后,上述方法还可包括:S14。
S14:通过回调信息对应的回调方法,将原生端执行完原生业务功能之后得到的执行结果发送给H5端。
其中,在该回调信息对应的回调方法用于指示原生端以怎样的方式对H5端进行数据回传时,原生端可以在执行原生调用信息对应的原生业务功能后,根据协议字符串携带的回调信息将执行完原生业务功能之后得到的执行结果发送给H5端。这些执行结果可以是拍照得到的图像、录像得到的视频数据、获取到的陀螺仪信息、加速度计信息、剪切板信息等。
在原生端执行完原生业务功能之后得到的执行结果发送给H5端的情况下,H5端可以对原生端提供的执行结果进行显示,可以在H5页面上显示通过调用原生业务功能得到的执行结果。
通过上述S21、S121、S13、S141的实现方式,在Hybrid混合开发模式下,支持Android原生代码与内嵌H5代码之间相互调用时,在交互过程中传入回调信息,相较于向WebView中注入Java对象以实现H5对于原生代码进行调用的方式,上述实现方式改善了现有方式的用户书写过程繁琐且不支持回调的问题。
在本申请实施例中,在上述S13之前,上述的方法还可包括:S31。
S31:在从协议字符串的首部位置识别到指定的唯一标识符时,通过网页视图WebView控件拦截JavaScript事件对应的调用跳转事件,并从协议字符串中提取原生调用信息。
其中,在android环境下,是通过Webview控件来加载HTML页面的内容的。可以向网页视图Webview控件注入自定义的WebChromeClient对象,以使得可以通过以下几种实现方式来进行事件拦截。
作为S31的一种实现方式,在网页视图Webview控件中注入有WebChromeClient对象的情况下,可以通过重写WebChromeClient对象的shouldOverrideUrlLoading方法来拦截URL SCHEME事件。
其中,本申请实施例中提到的WebView控件是在官方平台提供的WebView控件基础上,重写其对应的WebChromeClient对象的shouldOverrideUrlLoading方法,判断即将跳转的URL是否以定义好的唯一标识符开头(正常情况下,每次调用时都是相同的唯一标识符),如果是,则拦截跳转,从生成的协议字符串中取出原生方法名(handlerName)、该原生方法名对应的json参数(data),以及回调方法名(callback,是回调信息),基于此调用原生端执行该原生方法名对应的原生业务功能。以此拦截URL SCHEME的方式来拦截到在H5端发生的页面跳转事件,可以拦截到JavaScript事件对应的调用跳转事件,基于此,原生端可以解析获取协议字符串中的内容。
作为S31的另一种实现方式,可以通过重写WebChromeClient对象的onJsPrompt方法来拦截window对象的prompt事件。
作为S31的再一种实现方式,可以通过重写WebChromeClient对象的onJsAlert方法来拦截alert事件。
其中,通过Webview控件拦截URL SCHEME、window对象的prompt或alert事件,都可以实现原生端的事件监听,可以在拦截到对应的事件时,提取相应事件对应的跳转地址(协议字符串),并对提取到的地址进行解析识别,从而得到地址中携带的有效信息(原生调用信息、回调信息等)。通过上述三种实现方式,丰富了在H5端调用原生端时的事件拦截方式,提升了调用过程的易用性和稳定性。
上述S13可以包括:根据WebView控件提取到的原生调用信息,调用原生端执行原生调用信息对应的原生业务功能。
示例性地,对于格式为“唯一标识符+原生调用信息+回调信息”的协议字符串,在从该协议字符串的首部开头位置处,识别到符合约定的scheme协议要求的特定唯一标识符时,移动终端的网页视图(WebView)控件可以拦截到JavaScript事件代表的调用跳转事件,并对协议字符串继续进行解析识别,提取原生调用信息。如果识别不到以该唯一标识符开头的协议字符串,则不会继续进行数据提取,不会调用原生端的原生业务功能,这种情况下保持H5页面的当前显示内容不变,或者在不调用原生业务功能的情况下,为H5端提供默认显示内容,以供H5页面进行显示(例如显示“调用异常”、“链接地址错误”、“失败,请重试”等内容)。
如果提取到的原生调用信息对应的原生业务功能未被注册,可视为调用失败。如果提取到的原生调用信息对应的原生业务功能是被注册过的,且有效的,原生端可以被调用,原生端可以执行该原生业务功能。
通过上述的实现方式,基于生成的协议字符串的内容实现对于原生端的调用,原生端可直接根据协议字符串中携带的原生调用信息执行对应的原生业务功能,易用性和稳定性较高。
在本申请实施例中,如图3所示,在上述S13之前,上述的方法还包括注册过程,包括步骤:S10。
S10:基于预先配置的软件开发工具包SDK所提供的函数注册功能和handlers对象,启用函数注册功能,向handlers对象中写入原生端能够被JavaScript脚本调用的至少一组原生调用信息,至少一组原生调用信息中的每组原生调用信息对应原生端提供的一个原生业务功能。
其中,预先导入并配置在移动终端的软件开发工具包SDK提供一个注册处理函数registerHandler,基于该函数提供函数注册功能,还提供了与该函数匹配的一个Map类型(Map是键-值对的集合)的handlers对象。原生端可以向handlers对象内存入可被JavaScript脚本调用的原生调用方法,其中,以向handlers对象写入原生调用信息的方式,对原生调用方法对应的原生业务功能进行登记注册,每一组原生调用信息可包括一个原生方法名(handlerName),还可以包括该原生方法名(handlerName)对应的json参数(data)。
示例性地,如果要将原生端的一个获取系统信息的原生业务功能提供给JavaScript脚本,以供JavaScript脚本在H5端调用原生端的情况下进行调用,可以通过以下实例的代码实现:
webView.registerHandler(“getSystemInfo”){data,callback}。注册的功能是:获取系统信息并通过调用callback这一回调方法回传给JavaScript脚本。
其中,该例中的data和callback参数分别是JavaScript脚本在调用原生端的原生调用方法时传入的json参数和回调信息,在JavaScript脚本调用原生端代码前,会将callback信息存入全局window对象。原生端在执行完获取系统信息的这一原生调用方法后,将获取的系统信息作为结果(result),基于callback参数对应的回调方法,通过window.callback(result)的回传方式来进行结果回传,以此向JavaScript脚本发送原生端执行“getSystemInfo”这一原生方法名对应的原生业务功能后所获取的系统信息,以供H5端对JavaScript脚本得到的系统信息进行显示。
上述S10的步骤可以视为S11-S13之前的初始化注册步骤,用于将原生端可以提供的各种原生业务功能进行登记注册,以便于在S11-S13的方法中对基于被登记注册过的原生业务功能进行调用。
通过上述S10的实现方式,可以向H5端提供丰富的原生业务功能,可以将前述表1中的各项原生方法名对应的原生调用信息进行登记注册,在完成注册写入的情况下,H5端可以对原生端已注册的任一种原生业务功能进行快捷调用,有利于在H5端满足用户的复杂业务需求。
可选的,在原生调用信息对应的原生业务功能为连拍功能时,上述S13的一种实现方式可以是:通过重写原生端提供的相机回调函数onPreviewFrame,截取原生端的摄像头获取的视频帧数据,并对获取的帧数据进行压缩编码转换,得到连拍结果。
其中,可通过重写原生端官方API提供的相机回调函数onPreviewFrame(已通过SDK完成初始化注册的情况下),截取原生端的摄像头获取的视频帧数据,并对获取的帧数据进行压缩编码转换,得到连拍结果。
在一个实例中,以该实现方式实现无卡顿拍照的实例为:重写Camera.Callback对象的onPreviewFrame方法,将获取的帧数据转为base64(base64是一种编码方式)字符串传递给JavaScript脚本,以供JavaScript脚本对得到的base64字符串进行处理,例如将base64字符串对应的连拍结果显示在H5页面上。该例的部分代码示例如下:
在该例中,连拍功能是通过onPreviewFrame回调方式进行视频帧截取并压缩转换为位图(Bitmap),又称栅格图(Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。基于此实现方式进行连拍的情况下,可以实现无卡顿连拍,即用户无感知的连拍。基于该原理还可以实现自定义时长的视频录制,即,连续截取一段时间视频帧数据并进行压缩编码处理,最终在H5页面上进行显示播放。
可选的,在原生调用信息对应的原生业务功能为连拍功能时,上述S13的另一种实现方式可以是,调用原生端的原始拍照应用接口获取连拍结果。即,通过调用Android官方平台提供的原始拍照应用接口Api实现,该实现方式可以不依赖于SDK,但是连拍功能相较于上一实现方式较弱,无法实现无卡顿连拍的效果。
通过上述的实现方式,可以在H5端通过对于原生端的调用来实现连拍功能、数据压缩功能,相较于单次拍照,上述实现方式以简便的处理方式为网页应用提供了丰富的原生能力。其中,通过onPreviewFrame来实现连拍的方式可实现无卡顿连拍。
在一个应用场景下,软件开发工具包SDK提供了一套原生应用程序调用接口Api,以供H5端通过JavaScript脚本进行调用,并且提供以在H5端调用原生端的过程中传入回调信息的方式,对Android原生端调用JavaScript脚本(视为调用H5端)的回调处理方式进行了优化。可通过gradle的打包命令将软件开发工具包SDK打包为.aar格式的文件,并将该文件导入并部署到移动终端中,对SDK进行初始化,以使SDK提供的丰富原生应用程序调用接口Api和回调方式得到初始化注册。在初始化结束时,SDK内部JavaScript脚本初始化完成,H5端的JavaScript脚本使用addEventListenr方法可以添加初始化完成的通知消息,对于已经部署并配置完成的SDK,可以投入调用使用。即,可以实现前述的方法及实施方式。例如,SDK通过重写WebView控件的上述几种对象的相应方法来进行事件拦截,并判断即将跳转的地址是否符合预先约定的scheme协议格式要求,如果符合,则提取出原生调用信息,并调用原生能力执行原生调用信息对应的方法。在提取到回调信息的情况下,原生端可在执行完原生业务功能后,通过该回调信息对应的方法来调用JavaScript方法,并且回传执行结果(视为调用H5端)。
在一个实例中,用户在H5页面上进行了某个按钮的点击动作后,移动终端中的JavaScript脚本监听到在H5端触发的该点击动作引起的JavaScript事件。然后,移动终端生成协议字符串,该协议字符串符合约定的scheme协议格式要求:唯一标识符+原生方法名(handlerName)+json参数(data)+JavaScript回调信息(callback)。JavaScript脚本改变当前H5页面的URL(Uniform Resource Locator,统一资源定位符)为该协议字符串,即location.href=sheme,以此进行协议跳转。在协议跳转后,Android原生端可监听到这个跳转事件,并取出协议字符串对应的协议内容(取出协议字符串中的“原生方法名”,如果有参数也取出,如果有回调信息,也取出)。根据取出的协议内容,Android原生端执行Android原生代码,即,Android原生端提供的原生业务功能被H5端的JavaScript脚本成功调用。原生端被调用后,根据之前提取到的回调信息进行结果回传,以供H5端进行显示。
基于同一发明构思,本申请实施例还提供一种移动终端,包括:存储器201、处理器202以及通信总线203。通信总线203用于实现该移动终端中的各个组件之间的直接或间接连接。
其中,存储器201是一种存储介质,可以是但不限于:随机存取存储器(RandomAccess Memory,RAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除只读存储器(Erasable ProgrammableRead-Only Memory,EPROM)、电可擦除只读存储器(Electric Erasable ProgrammableRead-Only Memory,EEPROM)等。处理器202具有运算处理能力,可以是集成芯片,也可以是分立器件搭建的处理器。该存储器201中存储有计算机程序,该计算机程序被处理器202执行时实现前述的方法。
可以理解,图4所示的结构仅作为示意,在实际应用中,移动终端可包括比图4所示结构更多的组件,例如,可以包括显示器,用于显示H5页面的内容,还可包括多种传感器,例如陀螺仪、摄像头、温度传感器等,或者具有与图4所示结构不同的配置。
基于同一发明构思,本申请实施例还提供一种存储介质,该存储介质上存储有处理器可执行的计算机程序,计算机程序被处理器执行时执行前述的方法。
在本申请所提供的实施例中,应该理解到,所揭露实施例,可以通过其它的方式实现。以上所描述的实施例仅仅是示意性的,例如,多个单元或组件可以结合或者可以集成到另一个系统,所讨论的相互之间的连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
需要说明的是,上述方法和实施方式对应的功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以用软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备执行本申请各个实施例方法的全部或部分步骤。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种业务功能调用方法,其特征在于,应用于移动终端,所述移动终端的操作系统是Android,所述方法包括:
通过JavaScript脚本监听在H5端触发的JavaScript事件;
通过所述JavaScript脚本根据所述JavaScript事件对应的原始地址,生成协议字符串,以使原生端能够监听到所述JavaScript事件对应的调用跳转事件,并对所述协议字符串进行解析,所述协议字符串的格式符合所述H5端与原生端之间预先约定的scheme协议要求;
调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能。
2.根据权利要求1所述的方法,其特征在于,在所述生成协议字符串之前,所述方法还包括:
通过所述JavaScript脚本向window对象写入回调信息;
所述生成协议字符串,包括:生成携带所述回调信息的协议字符串;
在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之后,所述方法还包括:
通过所述回调信息对应的回调方法,将所述原生端执行完所述原生业务功能之后得到的执行结果发送给所述H5端。
3.根据权利要求1所述的方法,其特征在于,在所述生成协议字符串之后,所述方法还包括:
通过所述JavaScript脚本将所述JavaScript事件对应的原始地址更改为所述协议字符串对应的跳转地址,以使所述原生端能够监听到所述JavaScript事件对应的调用跳转事件,并对所述协议字符串进行解析。
4.根据权利要求1所述的方法,其特征在于,在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之前,所述方法还包括:
在从所述协议字符串的首部位置识别到指定的唯一标识符时,通过网页视图WebView控件拦截所述JavaScript事件对应的调用跳转事件,并从所述协议字符串中提取所述原生调用信息;
所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
根据提取到的所述原生调用信息,调用所述原生端执行所述原生调用信息对应的原生业务功能。
5.根据权利要求4所述的方法,其特征在于,所述网页视图WebView控件中注入有WebChromeClient对象,所述通过网页视图WebView控件拦截所述JavaScript事件对应的调用跳转事件,包括:
通过重写所述WebChromeClient对象的shouldOverrideUrlLoading方法来拦截URLSCHEME事件;
或,通过重写所述WebChromeClient对象的onJsPrompt方法来拦截window对象的prompt事件;
或,通过重写所述WebChromeClient对象的onJsAlert方法来拦截alert事件。
6.根据权利要求1所述的方法,其特征在于,所述原生调用信息中包括原生调用方法以及所述原生调用方法对应的json参数,所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
调用所述原生端根据所述json参数和所述原生调用方法,执行与所述json参数和所述原生调用方法匹配的原生业务功能。
7.根据权利要求1所述的方法,其特征在于,在所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能之前,所述方法还包括:
基于预先配置的软件开发工具包SDK所提供的函数注册功能和handlers对象,启用所述函数注册功能,向所述handlers对象中写入所述原生端能够被所述JavaScript脚本调用的至少一组所述原生调用信息,所述至少一组所述原生调用信息中的每组原生调用信息对应所述原生端提供的一个原生业务功能。
8.根据权利要求7所述的方法,其特征在于,在所述原生调用信息对应的原生业务功能为连拍功能时,所述调用所述原生端根据所述协议字符串中携带的原生调用信息,执行所述原生调用信息对应的原生业务功能,包括:
通过重写所述原生端提供的相机回调函数onPreviewFrame,截取所述原生端的摄像头获取的视频帧数据,并对获取的帧数据进行压缩编码转换,得到连拍结果;
或,调用所述原生端的原始拍照应用接口获取连拍结果。
9.一种移动终端,其特征在于,包括:
存储器;
处理器;
所述存储器上存储有所述处理器可执行的计算机程序,所述计算机程序被所述处理器执行时执行权利要求1-8任一项所述的方法。
10.一种存储介质,其特征在于,所述存储介质上存储有处理器可执行的计算机程序,所述计算机程序被所述处理器执行时执行权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011643830.8A CN112667482B (zh) | 2020-12-31 | 2020-12-31 | 业务功能调用方法、移动终端和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011643830.8A CN112667482B (zh) | 2020-12-31 | 2020-12-31 | 业务功能调用方法、移动终端和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112667482A true CN112667482A (zh) | 2021-04-16 |
CN112667482B CN112667482B (zh) | 2023-08-18 |
Family
ID=75412332
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011643830.8A Active CN112667482B (zh) | 2020-12-31 | 2020-12-31 | 业务功能调用方法、移动终端和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667482B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022237571A1 (zh) * | 2021-05-10 | 2022-11-17 | 北京字跳网络技术有限公司 | 图像融合方法、装置、电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468369A (zh) * | 2015-11-19 | 2016-04-06 | 深圳联友科技有限公司 | 移动平台上JavaScript调用原生功能的方法以及系统 |
CN108762956A (zh) * | 2018-05-31 | 2018-11-06 | 康键信息技术(深圳)有限公司 | 获取Native本地数据的方法、服务器、移动终端及存储介质 |
CN110162204A (zh) * | 2018-10-09 | 2019-08-23 | 腾讯科技(深圳)有限公司 | 触发设备功能的方法、装置以及控制进行图像捕获的方法 |
CN111459685A (zh) * | 2019-01-18 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 页面端与原生端的通信方法、装置、设备及可读介质 |
CN111722935A (zh) * | 2019-03-20 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 页面端与原生端的通信方法、装置、电子设备及可读介质 |
-
2020
- 2020-12-31 CN CN202011643830.8A patent/CN112667482B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468369A (zh) * | 2015-11-19 | 2016-04-06 | 深圳联友科技有限公司 | 移动平台上JavaScript调用原生功能的方法以及系统 |
CN108762956A (zh) * | 2018-05-31 | 2018-11-06 | 康键信息技术(深圳)有限公司 | 获取Native本地数据的方法、服务器、移动终端及存储介质 |
CN110162204A (zh) * | 2018-10-09 | 2019-08-23 | 腾讯科技(深圳)有限公司 | 触发设备功能的方法、装置以及控制进行图像捕获的方法 |
CN111459685A (zh) * | 2019-01-18 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 页面端与原生端的通信方法、装置、设备及可读介质 |
CN111722935A (zh) * | 2019-03-20 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 页面端与原生端的通信方法、装置、电子设备及可读介质 |
Non-Patent Citations (2)
Title |
---|
屈志坚;徐振清;林宏平;陈秋琳;: "设计模式在调度主站监控系统兼容性处理中的应用", 电力自动化设备, no. 07, pages 156 - 162 * |
闵栋;: "移动互联网技术产业进展与发展趋势", 现代电信科技, no. 1, pages 22 - 26 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022237571A1 (zh) * | 2021-05-10 | 2022-11-17 | 北京字跳网络技术有限公司 | 图像融合方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112667482B (zh) | 2023-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10613916B2 (en) | Enabling a web application to call at least one native function of a mobile device | |
US11588922B2 (en) | Capturing and replaying application sessions using resource files | |
US9448776B1 (en) | Method and apparatus for converting a website into a native mobile application | |
CN110275831B (zh) | 协议接口的mock数据校验方法和装置 | |
CN104301443B (zh) | 一种在web页面上调用端能力接口的方法和系统 | |
TWI671677B (zh) | 交互處理方法及裝置 | |
KR101720071B1 (ko) | 온보드 하드웨어 기능들을 가진 웹페이지들 | |
CN109240697B (zh) | 调用处理方法及装置、存储介质 | |
WO2016107465A1 (zh) | 一种卡片式桌面的实现方法、装置和系统 | |
KR20180038482A (ko) | 스마트 카드 판독/기입 방법 및 디바이스 | |
JP2022505656A (ja) | サブアプリケーション開発方法、装置、コンピュータ機器、並びにコンピュータプログラム | |
WO2022048141A1 (zh) | 一种图像处理方法及装置、计算机可读存储介质 | |
KR20140018414A (ko) | 브라우저 기반 애플리케이션 프로그램 확장 방법 및 디바이스 | |
CN112202824B (zh) | 网络资源访问的处理方法、装置及服务器、终端 | |
CN111752535A (zh) | Web页面的开发方法、装置、计算机设备和可读存储介质 | |
CN112667482B (zh) | 业务功能调用方法、移动终端和存储介质 | |
CN111431767A (zh) | 多浏览器资源同步方法、装置、计算机设备和存储介质 | |
CN107526678B (zh) | Web应用程序的测试方法和装置 | |
CN111008050B (zh) | 页面任务执行方法、装置、终端及存储介质 | |
CN107239265B (zh) | Java函数与C函数的绑定方法及装置 | |
CN111552643A (zh) | 多浏览器网页访问同步方法、系统 | |
CN114510266B (zh) | 一种一端发布轻应用且自动适配多终端使用的方法及系统 | |
CN113220296B (zh) | 安卓系统交互方法及装置 | |
CN108664456B (zh) | 一种动态构造文档中的显示元素的功能的方法 | |
CN108376090A (zh) | 网页图片的操作方法、装置、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |