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 {//声明一个webviewprivate WebView mWebView;private MyWebViewClient WVClient;private WebSettings webSettings;private MyWebChromeClient chromeClient;//测试Button,忽略就行private Button testBtn;//调用JS的Buttonprivate Button callJSBtn;//双击返回退出应用private long exitTime = 0; //Object对象,用来跟JS网页绑定private JSObject  jsobject;//android调用JS网页的时候会用到private Handler mHandler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {// TODO Auto-generated method stubmWebView = (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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString str = "test my web";mWebView.loadData("<html><body>"+str+"<html><body>", "text/html", "UTF-8");}});//调用JS网页callJSBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmHandler.post(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub//调用JS中的 函数,当然也可以不传参mWebView.loadUrl("javascript:androidCallJS('顺便传个参数给JS!')");}});}});}@Overridepublic 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;}@Overridepublic 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);}//单击系统返回键网页回退@Overridepublic 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仍然必不可少 *  * */@JavascriptInterfacepublic String  JsCallAndroid(){Toast.makeText(context, "JsCallAndroid", Toast.LENGTH_SHORT).show();return "JS call Andorid";}}


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




更多相关文章

  1. 深入理解Android插件化技术
  2. WebView与Javascript交互(相互调用参数、传值)
  3. Untity3D项目调用Android(安卓)图片错乱问题
  4. Android中“分享”功能的实现
  5. Android语言切换原理
  6. React Native 与 Android(安卓)混编项目复盘反思
  7. android与html5的交互——数据库操作,UI操作,以及html5的localStor
  8. 修正Android摄像头API
  9. 【android内核分析-输入输出】Android4.0 input touch解析

随机推荐

  1. 自定义progressbar 样式
  2. Android(安卓)listview 制作表格样式+由
  3. android Intent在活动之间穿梭
  4. Android中如何让手机屏幕不待机
  5. Android(安卓)中文API (91) ―― GestureDe
  6. Android(安卓)SDK代理服务器解决国内不能
  7. Failed to fetch URL https://dl-ssl.goo
  8. Jsoup使用教程(一)
  9. Android在layout xml中使用include
  10. android 使用openCV编译.so库