FROM : http://blog.csdn.net/hj563308597/article/details/45197709

Android WebView

在公司Android的开发过程中遇到一个新的问题,那就是让android代码和Javascript代码进行交互,然后在网上找到了关于webView的资料,之前并没有深入去了解WebView,一直以为Android 的WebView是一个用来显示网页的组件而已,没想到功能如此强大,竟然能跟JS互调传参,太牛了!

1、什么是webView?

WebView是一个webkit的内核,android对其做了很好的优化跟封装,主要用来处理网页相关的问题,盗图一张

2、webView相关类的作用可以去查api,网站上面也很多,主要就是WebChromeClient,WebViewClient、WebSettings几个类,比较关键的就是加载本地js网页跟网络js网页的时候要有点区别,注意权限跟访问方式有点点区别,下面贴代码:

[java] view plaincopy
  1. package com.chinaonenet.mywebview;
  2. import android.annotation.SuppressLint;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.webkit.WebSettings;
  11. import android.webkit.WebView;
  12. import android.widget.Button;
  13. /**
  14. * @author hujun
  15. *
  16. * QQ:563008597
  17. *
  18. * SuppressLint一定要加上去!!!
  19. * 低版本可能没问题,高版本JS铁定调不了Android里面的方法
  20. *
  21. */
  22. @SuppressLint("SetJavaScriptEnabled")
  23. public class MainActivity extends Activity {
  24. //声明一个webview
  25. private WebView mWebView;
  26. private MyWebViewClient WVClient;
  27. private WebSettings webSettings;
  28. private MyWebChromeClient chromeClient;
  29. //测试Button,忽略就行
  30. private Button testBtn;
  31. //调用JS的Button
  32. private Button callJSBtn;
  33. //双击返回退出应用
  34. private long exitTime = 0;
  35. //Object对象,用来跟JS网页绑定
  36. private JSObject  jsobject;
  37. //android调用JS网页的时候会用到
  38. private Handler mHandler = new Handler();
  39. @Override
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_main);
  43. initView();
  44. }
  45. private void initView() {
  46. // TODO Auto-generated method stub
  47. mWebView = (WebView) findViewById(R.id.webview);
  48. testBtn = (Button)findViewById(R.id.diyWeb);
  49. callJSBtn = (Button)findViewById(R.id.calljs);
  50. WVClient = new MyWebViewClient();
  51. chromeClient = new MyWebChromeClient();
  52. jsobject = new JSObject(MainActivity.this);
  53. webSettings = mWebView.getSettings();
  54. webSettings.setJavaScriptEnabled(true);
  55. webSettings.setBuiltInZoomControls(true);
  56. webSettings.setSavePassword(false);
  57. //支持多种分辨率,需要js网页支持
  58. webSettings.setUserAgentString("mac os");
  59. webSettings.setDefaultTextEncodingName("utf-8");
  60. //显示本地js网页
  61. mWebView.loadUrl(StringUrl.TEST_NET);
  62. mWebView.setWebViewClient(WVClient);
  63. mWebView.setWebChromeClient(chromeClient);
  64. //注意第二个参数JsTest,这个是JS网页调用Android方法的一个类似ID的东西
  65. mWebView.addJavascriptInterface(jsobject, "JsTest");
  66. //测试自定义网页,忽略
  67. testBtn.setOnClickListener(new OnClickListener() {
  68. @Override
  69. public void onClick(View v) {
  70. // TODO Auto-generated method stub
  71. String str = "test my web";
  72. mWebView.loadData("<html><body>"+str+"<html><body>", "text/html", "UTF-8");
  73. }
  74. });
  75. //调用JS网页
  76. callJSBtn.setOnClickListener(new OnClickListener() {
  77. @Override
  78. public void onClick(View v) {
  79. // TODO Auto-generated method stub
  80. mHandler.post(new Runnable() {
  81. @Override
  82. public void run() {
  83. // TODO Auto-generated method stub
  84. //调用JS中的 函数,当然也可以不传参
  85. mWebView.loadUrl("javascript:androidCallJS('顺便传个参数给JS!')");
  86. }
  87. });
  88. }
  89. });
  90. }
  91. @Override
  92. public boolean onCreateOptionsMenu(Menu menu) {
  93. // Inflate the menu; this adds items to the action bar if it is present.
  94. getMenuInflater().inflate(R.menu.main, menu);
  95. return true;
  96. }
  97. @Override
  98. public boolean onOptionsItemSelected(MenuItem item) {
  99. // Handle action bar item clicks here. The action bar will
  100. // automatically handle clicks on the Home/Up button, so long
  101. // as you specify a parent activity in AndroidManifest.xml.
  102. int id = item.getItemId();
  103. if (id == R.id.action_settings) {
  104. return true;
  105. }
  106. return super.onOptionsItemSelected(item);
  107. }
  108. //单击系统返回键网页回退
  109. @Override
  110. public void onBackPressed() {
  111. // TODO Auto-generated method stub
  112. //if (System.currentTimeMillis() - exitTime > 1500) {
  113. if (mWebView.canGoBack()) {
  114. mWebView.goBack();
  115. }/*else {
  116. Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_SHORT).show();
  117. }
  118. exitTime = System.currentTimeMillis();
  119. } */
  120. else {
  121. this.finish();
  122. }
  123. }
  124. }
[java] view plaincopy
  1. package com.chinaonenet.mywebview;
  2. import android.content.Context;
  3. import android.util.Log;
  4. import android.webkit.JavascriptInterface;
  5. import android.widget.Toast;
  6. public class JSObject {
  7. /*
  8. * 绑定的object对象
  9. * */
  10. private Context context;
  11. public JSObject(Context context){
  12. this.context = context;
  13. }
  14. /*
  15. * JS调用android的方法
  16. * @JavascriptInterface仍然必不可少
  17. *
  18. * */
  19. @JavascriptInterface
  20. public String  JsCallAndroid(){
  21. Toast.makeText(context, "JsCallAndroid", Toast.LENGTH_SHORT).show();
  22. return "JS call Andorid";
  23. }
  24. }

下面上传工程下载链接:http://download.csdn.net/detail/hj563308597/8624449

http://www.cnblogs.com/greatverve/archive/2012/01/18/android-javascript.html

转载于:https://www.cnblogs.com/Athrun/p/5025275.html

[转]JS调用Android里面的方法,Android调用JS里面的方法相关推荐

  1. android调用js函数方法,Android和JavaScript相互调用的方法

    本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件 ...

  2. android重写方法,android中native js中重写方法问题

    java代码: PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onS ...

  3. android封装全局调用的toast_【Android】Android中WebView实现Java与JS交互

    现在混合式开发是大趋势,H5不断蚕食移动互联网的份额,有的公司甚至只用H5就搞了一个APP,我们搞Android的不说会点H5,至少要懂怎么和H5(和JavaScript)交互,费话不多说. 一.先看 ...

  4. rn在java中什么意思_[React Native Android 安利系列]RN中使用js调用java代码

    欢迎大家收看react-native-android系列教程,跟着本系列教程学习,可以熟练掌握react-native-android的开发,你值得拥有: 书接上节,我们上节说道,如何控制原生andr ...

  5. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

  6. 调用实现天气预报功能android,Android编程实现获取新浪天气预报数据的方法

    本文实例讲述了Android编程实现获取新浪天气预报数据的方法.分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.php?ci ...

  7. Android Scroller与computeScroll方法的调用关系

    2019独角兽企业重金招聘Python工程师标准>>> Android ViewGroup中的Scroller与computeScroll的有什么关系? 答:没有直接的关系 知道了答 ...

  8. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  9. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 注解处理器 AbstractProcessor 中的 process 方法可能会调用多次 , 在生成代码时 , 一定要注意 , 检测到 注解节点 后 ...

  10. import android.view.window;,尝试在空对象引用上调用虚拟方法‘android.view.Window$回调...

    尝试在空对象引用上调用虚拟方法'android.view.Window$回调-android.view.Window.getCallback()' 当我SplashActivity打开LoginAct ...

最新文章

  1. 微信小程序下拉刷新和上拉加载
  2. 2018-北航-面向对象-前三次OO作业分析与小结
  3. python中的set函数、列表的操作
  4. (转)mysql基础命令
  5. maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...
  6. vivo S5官方广告正式揭晓:11月14日发布!
  7. Maven 打包过滤掉jar包、class文件和指定jsp文件
  8. 微信小程序滚动条返回顶部
  9. 用matlab读取raw并做出图像,image - 如何在MATLAB中读取RAW图像? - 堆栈内存溢出
  10. Gradle体验/第一篇:下装、安装、配置、体验
  11. eclipse tomcat maven热部署
  12. Selenium测试指南
  13. html水印生成pdf,如何在jsPDF中添加PDF生成水印?
  14. mac电脑重复文件如何查找?
  15. Elasticsearch分布式引擎7.x,2021黑马详细课程笔记
  16. DBeaver Read-only:No corresponding table column
  17. 线性代数:03 向量空间 -- 线性相关与线性无关
  18. Linux安装和使用Xftp6和Xshell6教程
  19. 探究文件上传安全:upload-labs靶场的绕过技巧
  20. 非管理型宽温防雷4口百兆光纤收发器工业导轨式发送机工业级以太网光纤收发器

热门文章

  1. 分页携带请求参数_一个值得深思的小问题 请求中的参数值为空要不要携带该参数?...
  2. TomcatNginx源码笔记分析
  3. POJ 1852 Ants O(n)
  4. 每天一道LeetCode-----将数字集转成字母集,计算有多少种转换方式
  5. 每天一道LeetCode-----找到给定数组的连续子数组,使这个子数组的和最大,要求复杂度为O(n)
  6. java html 转图片_Java HTML转换为图片
  7. Win7双开3389
  8. VC++ ipaddress控件的使用
  9. pixhawk原生固件笔记
  10. px4原生源码学习四--Nuttx 实时操作系统编程