[转]JS调用Android里面的方法,Android调用JS里面的方法
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网页的时候要有点区别,注意权限跟访问方式有点点区别,下面贴代码:
- package com.chinaonenet.mywebview;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.widget.Button;
- /**
- * @author hujun
- *
- * QQ:563008597
- *
- * SuppressLint一定要加上去!!!
- * 低版本可能没问题,高版本JS铁定调不了Android里面的方法
- *
- */
- @SuppressLint("SetJavaScriptEnabled")
- public class MainActivity extends Activity {
- //声明一个webview
- private WebView mWebView;
- private MyWebViewClient WVClient;
- private WebSettings webSettings;
- private MyWebChromeClient chromeClient;
- //测试Button,忽略就行
- private Button testBtn;
- //调用JS的Button
- private Button callJSBtn;
- //双击返回退出应用
- private long exitTime = 0;
- //Object对象,用来跟JS网页绑定
- private JSObject jsobject;
- //android调用JS网页的时候会用到
- private Handler mHandler = new Handler();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- private void initView() {
- // TODO Auto-generated method stub
- mWebView = (WebView) findViewById(R.id.webview);
- testBtn = (Button)findViewById(R.id.diyWeb);
- callJSBtn = (Button)findViewById(R.id.calljs);
- WVClient = new MyWebViewClient();
- chromeClient = new MyWebChromeClient();
- jsobject = new JSObject(MainActivity.this);
- webSettings = mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- webSettings.setBuiltInZoomControls(true);
- webSettings.setSavePassword(false);
- //支持多种分辨率,需要js网页支持
- webSettings.setUserAgentString("mac os");
- webSettings.setDefaultTextEncodingName("utf-8");
- //显示本地js网页
- mWebView.loadUrl(StringUrl.TEST_NET);
- mWebView.setWebViewClient(WVClient);
- mWebView.setWebChromeClient(chromeClient);
- //注意第二个参数JsTest,这个是JS网页调用Android方法的一个类似ID的东西
- mWebView.addJavascriptInterface(jsobject, "JsTest");
- //测试自定义网页,忽略
- testBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- String str = "test my web";
- mWebView.loadData("<html><body>"+str+"<html><body>", "text/html", "UTF-8");
- }
- });
- //调用JS网页
- callJSBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- //调用JS中的 函数,当然也可以不传参
- mWebView.loadUrl("javascript:androidCallJS('顺便传个参数给JS!')");
- }
- });
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- //单击系统返回键网页回退
- @Override
- public void onBackPressed() {
- // TODO Auto-generated method stub
- //if (System.currentTimeMillis() - exitTime > 1500) {
- if (mWebView.canGoBack()) {
- mWebView.goBack();
- }/*else {
- Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_SHORT).show();
- }
- exitTime = System.currentTimeMillis();
- } */
- else {
- this.finish();
- }
- }
- }
- package com.chinaonenet.mywebview;
- import android.content.Context;
- import android.util.Log;
- import android.webkit.JavascriptInterface;
- import android.widget.Toast;
- public class JSObject {
- /*
- * 绑定的object对象
- * */
- private Context context;
- public JSObject(Context context){
- this.context = context;
- }
- /*
- * JS调用android的方法
- * @JavascriptInterface仍然必不可少
- *
- * */
- @JavascriptInterface
- public String JsCallAndroid(){
- Toast.makeText(context, "JsCallAndroid", Toast.LENGTH_SHORT).show();
- return "JS call Andorid";
- }
- }
下面上传工程下载链接:http://download.csdn.net/detail/hj563308597/8624449
http://www.cnblogs.com/greatverve/archive/2012/01/18/android-javascript.html
[转]JS调用Android里面的方法,Android调用JS里面的方法的更多相关文章
- Android 4.2版本以下使用WebView组件addJavascriptInterface方法存在JS漏洞
JS注入漏洞存在的Android版本:Android < 4.2 综述:Android的SDK中提供了一个WebView组件,用于在应用中嵌入一个浏览器来进行网页浏览.WebView组件中的ad ...
- WebView中Js与Android本地函数的相互调用
介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- android开发中关于继承activity类中方法的调用
android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...
- [android] 绑定方式开启服务&调用服务的方法
需求:后台开启一个唱歌服务,这个服务里面有个方法切换歌曲 新建一个SingService继承系统Service 重写onCreate()和onDestory()方法 填一个自定义的方法changeSi ...
- Android app启动activity并调用onCreate()方法时都默默地干了什么?
Android app启动activity并调用onCreate() 方法时都默默地干了什么? 在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
1. 概述 bindService() 绑定服务 可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法. 如果调用者activity被销毁了, ...
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
以前写过两个Android开发配置文档,使用NDK进行JNI开发,这样能够利用以前已经写好的C++代码. 前两篇博客地址: http://blog.csdn.net/watkinsong/articl ...
- 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. 减少距 ...
随机推荐
- Android开机广播
有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...
- 网站错误记录:A transport-level error has occurred when sending the request to the server.
今天查看公司项目的日志文件,发现有这个错误:A transport-level error has occurred when sending the request to the server. 感 ...
- 安装php扩展
下面我以soap安装为例子 cd /home/zhangy/php-5.2.6/ext/soap /usr/local/php/bin/phpize#确定php-config文件在不在,调用php-c ...
- html的层叠次序---真没有想象的简单
学习资料1: http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html 学习资料2:http://www.cnblogs.com/weib ...
- 【转】C# 中的委托和事件
阅读目录 C# 中的委托和事件 引言 将方法作为方法的参数 将方法绑定到委托 事件的由来 事件和委托的编译代码 委托.事件与Observer设计模式 .Net Framework中的委托与事件 总结 ...
- 关于input全选反选恶心的异常情况
上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...
- Mysql hql字符串字段中是否包含某个字符串,用 find_in_set
有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被','分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE us ...
- [Linux 性能检测工具]FREE
FREE NAME free显示系统可用内存和已使用内存 语法 free [-b | -k | -m] [-o] [-s delay ] [-t] [-l] [-V] 描述 free显示了总可用和被用 ...
- SSRS报表连接超时的问题
这段时间遇到一个问题就是ReportService 中采用了远程连接的报表偶尔会断开连接,导致报表导出异常,查阅了很多资料,几天来就是断断续续的终于解决了这个问题,下面把一些解决的点一一展示出来,便于 ...
- x01.Game.CubeRun: 风一样的女子
1.题解 小孩学英语比较有意思,Monkey three => 猴三,风一样的女子 => 风 Girl.诸如此类不是重点,重点是一花一世界,一草一天堂.花花草草,纷纷扰扰.大千世界,当别具 ...