日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

[转]JS调用Android里面的方法,Android调用JS里面的方法

發布時間:2024/4/17 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]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網頁的時候要有點區別,注意權限跟訪問方式有點點區別,下面貼代碼:

?

?

?

[java]?view plaincopy
  • 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();??
  • ????????}??
  • ????}??
  • ??
  • }??
  • ?

    [java]?view plaincopy
  • 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

    ?

    轉載于:https://www.cnblogs.com/Athrun/p/5025275.html

    總結

    以上是生活随笔為你收集整理的[转]JS调用Android里面的方法,Android调用JS里面的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。