欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 运维知识 > android >内容正文

android

android中webview加载本地html,与javascript与android方法相互传值... -尊龙游戏旗舰厅官网

发布时间:2025/1/21 android 29 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 android中webview加载本地html,与javascript与android方法相互传值... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
尊龙游戏旗舰厅官网的版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51759125

最近在做项目中,要使用hightchart来实现心电图,于是,使用webview加载本地html页面,但是数据是通过蓝牙设备采集的数据,用java代码获取的数据,需要将数据传到javascript中去,使用来绘制心电图。以前都加载服务器端返回的url地址,使用webview加载,这次不同了,要自己实现心电图的绘制。于是细细的学习了javascript与java代码相互传值,最后总结在这里。

为了让webview中的javascript脚本调用android方法,webview提供了一套websettings工具类,该工具了提供了大量的方法来管理webview的选项设置,其中setjavascriptenable(true),是让webview中的javascript脚本来调用android方法。
还有一个最重要的方法addjavascriptinterface(object obj,string name)方法,该方法负责把object对象暴漏成javascript中的name对象。

1.在webview调用android只需要三步

  • 调用webview关联的websettings中setjavascriptenable(true)方法。
  • 调用webview关联的websettings中addjavascriptinterface(object obj,string name)。
  • 在javascript中通过暴露出来的name调用android中的方法。
  • 1.1首先创建一个java类

    public class myobject {private context mcontext;private string data;private string time;public myobject(context c,string data,string time){this.data = data;this.time = time;mcontext = c;}/*** 获取心电数据* @return*/@javascriptinterfacepublic string getdata(){string[] dd = new string[0];try {dd = data.substring(data.indexof("ъ") 2, data.length()-1).split(",");} catch (exception e) {e.printstacktrace();}return arrays.tostring(dd).tostring();}/*** 获取测量时间* @return*/@javascriptinterfacepublic string gettime(){return time;} }

    1.2创建在activity中加载html页面

    websettings wset =wb .getsettings();//调用webview关联的websettings中setjavascriptenable(true)方法。wset.setjavascriptenabled(true);//加载本地html页面wb.load;if (mlist != null && mlist.size()>0) {调用webview关联的websettings中addjavascriptinterface(object obj,string name)。wb.addjavascriptinterface(new myobject(getactivity(), mlist.get(0).getresult(),mlist.get(0).getdatetime()),"myobj");//这里的myobj是javascript对象,直接调用gettime()方法,即 myobj.gettime();}

    1.3创建xd.hmtl文件

    <html> <head><base href="<%=basepath%>"><title>心电title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><script type="text/javascript" src="file:///android_asset/js/jquery-1.8.3.min.js">script><script type="text/javascript" src="file:///android_asset/js/highcharts.js">script><script type="text/javascript"> $(function(){var data = myobj.getdata();var time = myobj.gettime();datahighchartxddt(data,time);})//心电function datahighchartxddt(dtxd,t){//以下是绘制心电的逻辑//省略});}script><style>style> head><body><div class="middlecenter-left-data-top" id="container">div> body> html>

    注意:

    var data = myobj.getdata(); var time = myobj.gettime();

    以上第一个方法就是获取心电数据,第二个方法就是获取测量时间。

    2.在android调用javascript方法

    2.1webview调用js的基本格式为

    webview.loadurl(“javascript:methodname(parametervalues)”)

    2.2调用js无参无返回值函数

    string call = "javascript:sayhello()"; webview.load;

    2.3调用js有参无返回值函数

    注意对于字符串作为参数值需要进行转义双引号。

    string call = "javascript:alertmessage("" "content" "")"; webview.load;

    2.4调用js有参数有返回值的函数

    android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。

    2.4.1.java调用js代码

    string call = "javascript:sumtojava(1,2)"; webview.load;

    2.4.2 js函数处理,并将结果通过调用java方法返回

    function sumtojava(number1, number2){window.control.onsumresult(number1 number2) }

    2.4.3.java在回调方法中获取js函数返回值

    @javascriptinterface public void onsumresult(int result) {log.i(logtag, "onsumresult result=" result); }

    2.5 java代码时用evaluatejavascript方法调用

    function getgreetings() {return 1; } private void testevaluatejavascript(webview webview) {webview.evaluatejavascript("getgreetings()", new valuecallback() {@overridepublic void onreceivevalue(string value) {log.i(logtag, "onreceivevalue value=" value);}}); }

    输出结果

    i/mainactivity( 1432): onreceivevalue value=1
    注意

    上面限定了结果返回结果为string,对于简单的类型会尝试转换成字符串返回,对于复杂的数据类型,建议以字符串形式的json返回。
    evaluatejavascript方法必须在ui线程(主线程)调用,因此onreceivevalue也执行在主线程。

    总结,javascript与android方法相互传值,基本上就这么多了。

    总结

    以上是尊龙游戏旗舰厅官网为你收集整理的android中webview加载本地html,与javascript与android方法相互传值...的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

    网站地图