android和JS交互,相互调用方法传值。不使用第三方实现原生加载word、ppt、pdf文档

来源:互联网 发布:怎么管理mac下面的图标 编辑:程序博客网 时间:2024/06/06 02:42

android行情一天不如一天。都说是铁打的后台,流水的前端,没人要的移动端。

言归正传,现在项目需求中原生app开发好使比较久,现需求架子是app,内容全是webview嵌套。但现在发现,纯网页流程度上实在不敢恭维,而且有些功能前端实现不了(比如不使用第三方加载txt、word、ppt、pdf文本,调用本机上传图片。)

第一步在webActivity中设置

WebSettings settings = mWebView.getSettings();settings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(myWebChromeClient2, "android");//记住这个名字,可以随意命名
第二步写一个方法供js调用,可以有参数,参数根据需求自己定义

@JavascriptInterfacepublic void  getImageName(String imagename) {    Log.e("TAG_imagename==", imagename + "");    this.imagename = imagename;    take(imagename);}
js调用的时候就是android.getImageName("");


android调用js方法请看下面

比如js的方法是这样定义的

function getandroidString(String stringbase64){

 alert(stringbase64);      

}  

android 调用的时候

mWebView.loadUrl("javascript:getandroidString(" + imagebase64 + ")");
于是坑出现了,因为我这边需要传两个值,所以定义两个参数。有时mWebView.loadUrl却不调用,网上也有一下说法。

第一:webview.loadurl 的加载是在另一个线程中执行必须要在webview加载完毕执行。

mWebView.loadUrl("http://www.baidu.com");
mWebView.loadUrl("javascript:getandroidString(" + imagebase64 + ")");
也就是说虽然是这么写的,但实际上第二句有可能比第一句先完成
解决办法:重写MyWebViewClientonPageFinished方法,在onPageFinished方法中处理操作。
第二:js有错误,前端还无法定位,这个就很蛋疼了。
然这两种方式都没有解决我的问题。因为我需要传递来两个参数,第一个参数字母数字都可以,第二个参数只要传递字母就无法执行。
开始想的是前端在定义两个参数的时候类型有差别,但前端再三保证,诶有问题。无意中发现一篇文章,上面写道有人要求传递参数的时候要加单引号‘’
他测试后发现没有问题,加不加一样。
然后我就想是不是一位内这个原因呢,特殊情况必须要加单引号‘’
mWebView.loadUrl("javascript:getandroidString('" + photoName + "','" + imagebase64 + "')");
调用成功。有问题请加qq1657379258.我也是菜鸟,大家一起学习


最后附上不使用第三方加载word、ppt、pdf等文件的类库地址;

阅读全文
0 0
原创粉丝点击