ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 安卓交互文档协议 ## 内嵌H5页面的加载 1.原生提供一个框架页面给H5页面。框架只提供一个叫`InnerWeb`的类(这点js不需要知晓).如何需要在本地加载一个纯H5的内嵌页面,请使用`IntentHelper.startWeb(Context context, String url)`方法去载入一个内嵌H5页面。具体内部只是加载这个url。之后的逻辑都交给H5处理。 ## Android本地通过Java调用HTML页面中的JavaScript方法 原生调用js方法分一下两种类型的方法: 1. 无返回值方法 2. 有返回值方法 ### 调用js中无返回值方法 很简单,我们直接调用即可具体代码示例如下: ```java /** * f1 为js中声明的函数 */ mWebView.loadUrl("javascript:f1()"); ``` 这样就可以调用js的方法了。 ### 调用js中有返回值的方法 稍微复杂一点,如下: ```java /** * sum 为js中定义的函数 */ mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.e(TAG, "onReceiveValue value=" + value); } }); ``` ## js调用Android本地Java方法 本地提供给js调用的映射对象,这需要注入,我们同一使用一个叫`xhxapp`的对象。js如要调用本地方法。都以此开头来代表我们原生方法。 具体如下: ```javascript <script type="text/javascript"> function s(){ // 注意下面的‘xhxapp’ var result = window.xhxapp.gotoLogin(); document.getElementById("p").innerHTML = result; } </script> ``` 本地代码如下: ```java public calss AppJavascriptInterface { @JavascriptInterface public void gotoLogin() { if (mContext.get() == null) { Log.w("web", "页面已关闭"); return; } LoginActivity.start(mContext.get()); } } ``` # 新航线协议 新航线协议的主要以原生提供给H5的为主, 下面是我详细罗列的: ```java /** * 跳转登录 */ @JavascriptInterface public void gotoLogin(); /** * 跳转课程详情 */ @JavascriptInterface public void gotoCourseDetail(); /** * 关闭当前页面 */ @JavascriptInterface public void finish(); /** * 关闭当前页面获取当前用户信息,如果为空,说明用户未登录 * * 目前有如下信息(以json格式返回给H5): * memberId: 用户id * token: 用户登录唯一标识 * memberType: 用户类型 */ @JavascriptInterface public String getUserInfo(); /** * 返回 * * 目前有如下信息(以json格式返回给H5): * memberId: 用户id * token: 用户登录唯一标识 * memberType: 用户类型 */ public void back(); /** * */ public void toast(String msg); public void confirm(String title, String msg, String positiveFunctionName, String negativeFunctionName); ``` ```javascript /** * return boolean 类型返回值: true h5已经处理了返回,native不处理; false h5没有处理返回,native返回上一个非H5页面 */ function gobackIfNeeded(); ``` app的唤醒方式方案: > 1.定义scheme: com.mistong.kklonline > > 2.另外具体页面的打开待定 约定新航线ua: "xxxx XHX/1.3.0", 其中xxxx为系统默认ua。iOS与Android不一样。"/"后为app版本号