近期项目中常常使用Html5而Android与JS调用常常会用到,这里记录一下,測试系统5.0以上。

这里先贴一下源代码

Activity:

package jwzhangjie.com.webviewandjs;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.webView);
initWebView();
} private void initWebView(){
//设置编码
webView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
webView.getSettings().setJavaScriptEnabled(true);
//设置监听事件
webView.setWebViewClient(new JieWewViewClient());
//设置本地调用对象及其接口
webView.addJavascriptInterface(new JavaScriptObject(getApplicationContext()), "toAndroid");
//载入js
webView.loadUrl("file:///android_asset/index.html");
} public void javaCallJsNoParams(View view){
webView.loadUrl("javascript:javaCallJsNoParamsMethod()");
} public void javaCallJsHasParams(View view){
webView.loadUrl("javascript:javaCallJsHasParamsMethod('" + 123 + "')");
} public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
} @JavascriptInterface //sdk17版本号以上加上注解
public void jsCallJavaNoParams() {
Toast.makeText(mContxt, "Js调用Java方法(无參)", Toast.LENGTH_LONG).show();
} @JavascriptInterface //sdk17版本号以上加上注解
public void jsCallJavaHasParams(String params) {
Toast.makeText(mContxt, "Js调用Java方法(有參):" + params, Toast.LENGTH_SHORT).show();
}
} class JieWewViewClient extends WebViewClient{
/**
* 假设紧跟着
* webView.loadUrl("file:///android_asset/index.html");
* 调用Js中的方法是不起作用的,必须页面载入完毕才干够
*/ @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.loadUrl("javascript:javaCallJsHasParamsMethod('" + 123 + "')");
}
} }

html:

<!DOCTYPE HTML>
<HTML>
<HEAD>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
</HEAD>
<BODY>
<div>
<input type="text" id="showText" style="width:100%;height:100px;margin-bottom:10px" readonly>
<input type="button" onclick="jsCallJavaNoParamsMethod()" value="Js调用Java方法(无參)">
<input type="button" onclick="jsCallJavaHasParamsMethod('成功了')" value="Js调用Java方法(有參)">
</div>
</BODY>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function javaCallJsNoParamsMethod(){
$('#showText').val("Java调用js方法,无參数");
} function javaCallJsHasParamsMethod(params){
$('#showText').val("Java调用Js方法。有參数:"+params);
} function jsCallJavaNoParamsMethod(){
toAndroid.jsCallJavaNoParams();
} function jsCallJavaHasParamsMethod(params){
toAndroid.jsCallJavaHasParams(params);
}
</script>
</HTML>

界面:

注意点:

1、Android系统17以及以上,js调用java须要在方法上面增加@JavascriptInterface

2、不能在载入html页面的以下直接调用js方法,应该在WebViewClient的onPageFinished里面载入,原则就是必须html载入完毕后。才干调用js中的方法。

源代码:http://download.csdn.net/download/jwzhangjie/9020941

Android与JS互相调用以及注意的更多相关文章

  1. Android与js互相调用

    有话要说: 本篇主要总结了简单的Android与js互相调用的方法. 在开发过程中遇到了需要在安卓中调用js方法的需求,于是将具体的实现过程总结成这篇博客. 效果: 其中“调用安卓方法”按钮是html ...

  2. android和js互相调用

    import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.o ...

  3. Android 使用js调用Java

    效果如: 主要用到一个接口类:MyObject package com.example.jsdemo; import android.content.Context; import android.s ...

  4. Android与JS混编(js调用java)

    项目中需要使用android与js的混编来开发app. 下面就介绍一下吧. 有时候我们需要用js调用native控件,要想实现这个功能,我们需要做的就只有三步: 1.允许webview执行js脚本 2 ...

  5. Android开发学习之路--Java和Js互相调用

      随着前端的火热,以前开发的快速,越来越多的native app在其中融合了h5,就拿淘宝就是很多的h5组成的,一旦出现什么节日,他都可以不用通过更新app来实现界面的改变,而且android和io ...

  6. android js 互相调用

    代码地址如下:http://www.demodashi.com/demo/13107.html android js 互相调用 第二版 支持js匿名函数接收 支持js json对象接收 支持js函数返 ...

  7. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  8. Android-webview和js互相调用

    Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的 ...

  9. android webview js交互 第一节 (java和js交互)

    转载请注明出处         挺帅的移动开发专栏  http://blog.csdn.net/wangtingshuai/article/details/8631835        在androi ...

随机推荐

  1. BZOJ 3679 数位DP

    思路: f[i][j]表示i位数乘积为j的方案数 j的取值最多5000多种,那就开个map存一下好了 f[i][mp[k*rec[j]]]+=f[i-1][j]; //By SiriusRen #in ...

  2. Android 存储路径选择

    Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的SD卡中. 在Android系统中如何获得存储的路径呢? p ...

  3. 金立 M6 (GN8003) 解锁 BootLoader 进入第三方 recovery 刷机 ROOT

    首先下载好工具:http://url.cn/5EILbQn 备用连接 :http://pan.baidu.com/s/1c28j7k0 本篇教程教你如何傻瓜式解锁BootLoader并刷入recove ...

  4. Excel的用到的常规的技巧

    这几天在做各种发票的报表,好几百的数据当然离不开EXCel,自己又是个白班,就记录下啦! EXCEL 判断某一单元格值是否包含在某一列中 就在Excel的表格中加入这个函数:=IF(ISERROR(V ...

  5. Spark on Yarn集群搭建

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  6. SLAM: Ubuntu14.04_Kylin安装ROS-Indigo

    参考连接:ROS-Indigo版在Ubuntu上的安装第一步: 软件源配置 1. 增加下载源(增加ubuntu版的ros数据仓库,即下载源)(通用指令适合任何版本的ros) sudo sh -c 'e ...

  7. 《计算机图形学基础(OpenGL版)》使用院校(更新)

    从清华大学出版社责任编辑处获悉,很多高等院校选用了我们这本教材,读者反应不错! 另外,编辑提供了一份详细的使用院校名单如下: 河南科技学院 中原工学院 河北工程大学 防空兵学院 伊犁师院电信学院 吉林 ...

  8. (转)PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示

    http://blog.csdn.net/gisshixisheng/article/details/41575833 标题比较长,主要呢是实现以下几点: 1.将shp数据导入到PostGIS中: 2 ...

  9. HttpRunnerManager 搭建使用方法

    HttpRunnerManager Design Philosophy 基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRu ...

  10. 关于vcruntime140D.dll丢失问题

    电脑磁盘占用率100%,又检测出硬盘磁道坏了,要么装win7,要么换个SSD,无奈重装环境. 遇到这个问题,之前的电脑就遇到过,网上交的下载这个文件装到C盘Windows的SysWOW64,对于实验室 ...