安卓Java与js的互相调用分析

来源:互联网 发布:分销系统源码 编辑:程序博客网 时间:2024/06/06 16:48

首先看看Java调用js:

先上js代码:

function halloJava(arg){         document.getElementById("content").innerHTML =             ("hallo,native friend:"+arg );    }
然后是Java代码:

webView.loadUrl("javascript:halloJava("+"'"+name+"'"+")");
上述的代码实现了从Java中调用js中的halloJava的方法,并传入了一个name的参数;


再来看js调用Java:

先上js代码:

<input type="button" value="点击Android被调用" onclick="window.Android.hallJs('JS中传来的参数')"/>
再来看Java代码:

webView.addJavascriptInterface(new JSInterface (),"Android");//首先配置webviewclass JSInterface {    @JavascriptInterface//添加注解     public void halloJs(String arg){                   Toast.makeText(MainActivity.this,arg,Toast.LENGTH_SHORT).show();     }}
上述代码实现了在js中调用了Java类JSInterface的对象“Android”中的JavascriptInterface注解修饰的halloJs的方法,并传入了“JS中传来的参数”的参数;


上述的两种情况适用于APP已经集成了webview并且是在APP的webview内加载网页,然后实现Java与js的互相调用,但是还有另一种情况,通过浏览器访问某一网页的时候,如何跳转到对应APP的对应activity页面呢?当然能,看下面的实现方式:

首先,在manifest文件中对对应的activity添加intent-filter标签;

<!--用这个Activity专门处理本App调起的情况--><activity android:name=".SchemeActivity"          android:label="@string/app_name">    <!--要想在别的App上能成功调起App,必须添加intent过滤器-->    <intent-filter>        <!--协议部分,随便设置-->        <data android:scheme="hallonativeworld"/>        <!--下面这几行也必须得设置-->        <category android:name="android.intent.category.DEFAULT"/>        <action android:name="android.intent.action.VIEW"/>        <category android:name="android.intent.category.BROWSABLE"/>    </intent-filter></activity>
接着,在SchemeActivity中接收并处理URI请求,可以跳转到不同的界面;

// 尝试获取WebApp页面上过来的URLUri uri = getIntent().getData();if (uri != null) {    StringBuffer sb = new StringBuffer();    // 完整的url信息    sb.append("url: " + uri.toString());    // scheme部分    sb.append("\nscheme: " + uri.getScheme());    // host部分    sb.append("\nhost: " + uri.getHost());    // 访问路劲    sb.append("\npath: ");    List<String> pathSegments = uri.getPathSegments();    for (int i = 0; pathSegments != null && i < pathSegments.size(); i++) {        sb.append("/" + pathSegments.get(i));    }    // Query部分    sb.append("\nquery: ?" + uri.getQuery());       tv.setText(sb.toString());}
最后,在webAPP页面上,通过如下方式调用;

<!-- 注意这里的href格式 -- ><a href="hallonativeworld://schemedemo/get/info?id=10000">open android native app</a>

完成本文的主题之后,再来聊聊webview;对于系统自带的webview,实在是可以轻松罗列出十大罪状,所以一般建议用第三方开源的webview,这里特别推荐一下腾讯的X5webview;来看看官网中对其优势的分析(他的优势很大一部分对比于系统原生的webview):

TBS(腾讯浏览服务)的优势

1) 速度快:相比系统webview的网页打开速度有30+%的提升;

2) 省流量:使用云端优化技术使流量节省20+%; 

3) 更安全:安全问题可以在24小时内修复; 

4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;

5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;

6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;

7) 功能全:在Html5、ES6上有更完整支持;

8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;

9) 视频和文件格式的支持x5内核多于系统内核

10) 防劫持是x5内核的一大亮点

至于更具体的介绍和使用方式,大家可以参考官方文档介绍:https://x5.tencent.com/tbs/guide/sdkInit.html

再来聊聊Hybrid APP,Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势”,使用H5实现的功能能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,节约了成本,提高了开发效率。微信,QQ、QZone、网易云音乐等大量软件都内嵌了H5,也就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发。其实就是Java代码和JavaScript之间的调用。Cordova是一个广泛使用的Hybrid开发框架,它提供了一套js和Native交互规范,大家可以参考和学习!


原创粉丝点击