[转]JS调用Android里面的方法,Android调用JS里面的方法
16lz
2021-12-04
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 plain copy- packagecom.chinaonenet.mywebview;
- importandroid.annotation.SuppressLint;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.webkit.WebSettings;
- importandroid.webkit.WebView;
- importandroid.widget.Button;
- /**
- *@authorhujun
- *
- *QQ:563008597
- *
- *SuppressLint一定要加上去!!!
- *低版本可能没问题,高版本JS铁定调不了Android里面的方法
- *
- */
- @SuppressLint("SetJavaScriptEnabled")
- publicclassMainActivityextendsActivity{
- //声明一个webview
- privateWebViewmWebView;
- privateMyWebViewClientWVClient;
- privateWebSettingswebSettings;
- privateMyWebChromeClientchromeClient;
- //测试Button,忽略就行
- privateButtontestBtn;
- //调用JS的Button
- privateButtoncallJSBtn;
- //双击返回退出应用
- privatelongexitTime=0;
- //Object对象,用来跟JS网页绑定
- privateJSObjectjsobject;
- //android调用JS网页的时候会用到
- privateHandlermHandler=newHandler();
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- privatevoidinitView(){
- //TODOAuto-generatedmethodstub
- mWebView=(WebView)findViewById(R.id.webview);
- testBtn=(Button)findViewById(R.id.diyWeb);
- callJSBtn=(Button)findViewById(R.id.calljs);
- WVClient=newMyWebViewClient();
- chromeClient=newMyWebChromeClient();
- jsobject=newJSObject(MainActivity.this);
- webSettings=mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- webSettings.setBuiltInZoomControls(true);
- webSettings.setSavePassword(false);
- //支持多种分辨率,需要js网页支持
- webSettings.setUserAgentString("macos");
- 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(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Stringstr="testmyweb";
- mWebView.loadData("<html><body>"+str+"<html><body>","text/html","UTF-8");
- }
- });
- //调用JS网页
- callJSBtn.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- mHandler.post(newRunnable(){
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- //调用JS中的函数,当然也可以不传参
- mWebView.loadUrl("javascript:androidCallJS('顺便传个参数给JS!')");
- }
- });
- }
- });
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- //Handleactionbaritemclickshere.Theactionbarwill
- //automaticallyhandleclicksontheHome/Upbutton,solong
- //asyouspecifyaparentactivityinAndroidManifest.xml.
- intid=item.getItemId();
- if(id==R.id.action_settings){
- returntrue;
- }
- returnsuper.onOptionsItemSelected(item);
- }
- //单击系统返回键网页回退
- @Override
- publicvoidonBackPressed(){
- //TODOAuto-generatedmethodstub
- //if(System.currentTimeMillis()-exitTime>1500){
- if(mWebView.canGoBack()){
- mWebView.goBack();
- }/*else{
- Toast.makeText(this,"再按一次返回键退出",Toast.LENGTH_SHORT).show();
- }
- exitTime=System.currentTimeMillis();
- }*/
- else{
- this.finish();
- }
- }
- }
- packagecom.chinaonenet.mywebview;
- importandroid.content.Context;
- importandroid.util.Log;
- importandroid.webkit.JavascriptInterface;
- importandroid.widget.Toast;
- publicclassJSObject{
- /*
- *绑定的object对象
- **/
- privateContextcontext;
- publicJSObject(Contextcontext){
- this.context=context;
- }
- /*
- *JS调用android的方法
- *@JavascriptInterface仍然必不可少
- *
- **/
- @JavascriptInterface
- publicStringJsCallAndroid(){
- Toast.makeText(context,"JsCallAndroid",Toast.LENGTH_SHORT).show();
- return"JScallAndorid";
- }
- }
下面上传工程下载链接:http://download.csdn.net/detail/hj563308597/8624449
http://www.cnblogs.com/greatverve/archive/2012/01/18/android-javascript.html
更多相关文章
- Android(安卓)home键和back键区别
- Android横竖屏切换
- Android中使用WebView, WebChromeClient和WebViewClient加载网页
- 横竖屏切换问题
- Android(安卓)模块化完整方案实现
- Android(安卓)MediaPlayer
- 逐帧(Frame)动画
- ReactNative(嵌入到android)调用android原生组件与原生模块(比如某
- Android(安卓)AsyncTask