生活随笔
收集整理的這篇文章主要介紹了
Android与Javascript交互之入门
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android與JavaScript交互主要是使用的WebView。
關(guān)于WebView,一般涉及到2個(gè)類:WebChromeClient 和?WebViewClient 。
開發(fā)的大致流程為(摘自Android developer):
A WebView has several customization points where you can add your own behavior. These are:
Creating and setting a WebChromeClient subclass. This class is called when something that might impact a browser UI happens, for instance, progress updates and JavaScript alerts are sent here (see Debugging Tasks).
Creating and setting a WebViewClient subclass. It will be called when things happen that impact the rendering of the content, eg, errors or form submissions. You can also intercept URL loading here (via shouldOverrideUrlLoading()).
Modifying the WebSettings, such as enabling JavaScript with setJavaScriptEnabled().
Injecting?Java?objects into the WebView using the addJavascriptInterface(Object, String) method. This method allows you to inject?Java?objects into a page's JavaScript context, so that they can be accessed by JavaScript in the page.
好了,廢話不多說,上Demo。
此demo完成了Android與Javascript交互的基礎(chǔ)功能,并用json字符串進(jìn)行了值傳遞。
秉持一貫的風(fēng)格,知識(shí)內(nèi)容都在代碼注釋中,這樣方便以后復(fù)習(xí)。(布局就不貼了,比較簡(jiǎn)單)
整個(gè)工程結(jié)構(gòu)比較簡(jiǎn)單:
首先是這個(gè)jsdroid.html文件的界面(貼界面其實(shí)有點(diǎn)2 --!):
html代碼比較簡(jiǎn)單:
[html] ?view plaincopy print?
< html > ?? < meta ? charset = "GBK" > ?? < head > ?? < title > js交互android </ title > ?? < script ? type = "text/javascript" > ?? ?????? ????function?show(){?? ????var?a ?=? document .getElementById("text").value;?? ????alert("警告,你輸入的是:"+a);?? ????}?? ?? ????function?rfInfo(jsonStr)?{??? ????????????document.getElementById("info").innerHTML = "從Android客戶端傳來的作者信息:" +jsonStr.Developer;??? ????????}??? ?? ????function?cfm()?{??? ????if(confirm("確認(rèn)界面提示?")){?? ????return?true;?? ????}else?? ?????return?false;?? ????}??? ?? ????function?pmt()?{??? ????var?place ?=? prompt ("請(qǐng)輸入位置?","");?? ????}?? ?? </ script > ?? </ head > ?? < body > ?? < form ? action = "" > ?? ????< p > < div ? id = "info" ? > 從Android客戶端傳來的作者信息: </ div > </ p > ?? ????< p > < input ? type = "text" ? id = "text" ? value = "input?your?msg" /> </ p > ?? ????< p > < div ? id = "inputinfo" ? > 輸入的信息: </ div > </ p > ?? ????< p > < input ? type = "button" ? id = "btn_alert" ? onclick = "show()" ? value = "Alert" /> </ p > ?? ????< p > < input ? type = "button" ? id = "btn_cfm" ? onclick = "cfm()" ? value = "Confirm" /> </ p > ?? ????< p > < input ? type = "button" ? id = "btn_pmt" ? onclick = "pmt()" ? value = "Prompt" /> </ p > ?? ????< p > < input ? type = "button" ? id = "btn_pmt" ? onclick = "window.demo.adrdMethod()" ? value = "調(diào)用android方法" /> </ p > ?? </ form > ?? </ body > ?? </ html > ??
其中,id為“btn_pmt”的button,監(jiān)聽器設(shè)置的是調(diào)用Android中的方法。
好了,上最重要的,android端實(shí)現(xiàn)的代碼。
[java] ?view plaincopy print?
package ?com.harlan.demo.activity;?? ?? import ?android.annotation.SuppressLint;?? import ?android.app.Activity;?? import ?android.graphics.Bitmap;?? import ?android.os.Bundle;?? import ?android.os.Handler;?? import ?android.util.Log;?? import ?android.view.View;?? import ?android.webkit.JsPromptResult;?? import ?android.webkit.JsResult;?? import ?android.webkit.WebChromeClient;?? import ?android.webkit.WebSettings;?? import ?android.webkit.WebView;?? import ?android.webkit.WebViewClient;?? import ?android.widget.Button;?? import ?android.widget.Toast;?? ?? @SuppressLint ( "SetJavaScriptEnabled" )?? public ? class ?MainActivity? extends ?Activity?{?? ?? ????private ? static ? final ?String?TAG?=? "MainActivity" ;?? ????WebView?webView;?? ????Handler?handler?=?new ?Handler();?? ????Button?btn;?? ????final ?String??jsonStr?=? "{\"Developer\":\"Harlan\",\"Place\":\"Nanjing\"}" ;?? ?? ????????????@Override ?? ????????????public ? void ?onCreate(Bundle?savedInstanceState)?{?? ????????????????super .onCreate(savedInstanceState);?? ????????????????setContentView(R.layout.activity_main);?? ?? ????????????????webView?=?(WebView)?findViewById(R.id.myweb);?? ????????????????btn?=?(Button)?findViewById(R.id.mybtn);?? ????????????????? ? ? ? ? ?? ????????????????WebSettings?webSettings?=?webView.getSettings();?? ?????????????????? ????????????????webSettings.setJavaScriptEnabled(true );?? ?????????????????? ????????????????webSettings.setSupportZoom(false );?? ?????????????????? ????????????????webView.loadUrl("file:///android_asset/jsdroid.html" );?? ?? ????????????????? ? ? ? ? ?? ????????????????class ?HarlanWebChromeClient? extends ?WebChromeClient?{?? ?? ????????????????????? ? ? ?? ????????????????????@Override ?? ????????????????????public ? boolean ?onJsAlert(WebView?view,?String?url,?String?message,?? ????????????????????????????JsResult?result)?{?? ????????????????????????Toast.makeText(getApplicationContext(),?message,?? ????????????????????????????????Toast.LENGTH_LONG).show();?? ????????????????????????Log.d(TAG,?"彈出了提示框" );?? ????????????????????????? ? ? ? ?? ????????????????????????result.confirm();?? ????????????????????????return ? true ;?? ????????????????????}?? ?????????????????????? ????????????????????? ? ? ?? ????????????????????@Override ?? ????????????????????public ? boolean ?onJsConfirm(WebView?view,?String?url,?? ????????????????????????????String?message,?JsResult?result)?{?? ????????????????????????Log.d(TAG,?"彈出了確認(rèn)框" );?? ????????????????????????result.confirm();?? ????????????????????????return ? true ;?? ????????????????????}?? ?????????????????????? ????????????????????? ? ? ?? ????????????????????@Override ?? ????????????????????public ? boolean ?onJsPrompt(WebView?view,?String?url,?? ????????????????????????????String?message,?String?defaultValue,?? ????????????????????????????JsPromptResult?result)?{?? ????????????????????????Log.d(TAG,?"彈出了輸入框" );?? ????????????????????????result.confirm();?? ????????????????????????return ? true ;?? ????????????????????}?? ?????????????????????? ????????????????????? ? ? ?? ????????????????????@Override ?? ????????????????????public ? boolean ?onJsBeforeUnload(WebView?view,?String?url,?? ????????????????????????????String?message,?JsResult?result)?{?? ????????????????????????Log.d(TAG,?"彈出了離開確認(rèn)框" );?? ????????????????????????result.confirm();?? ????????????????????????return ? true ;?? ????????????????????}?? ????????????????}?? ?????????????????? ????????????????class ?HarlanWebViewClient? extends ?WebViewClient{?? ????????????????????? ? ?? ????????????????????@Override ?? ????????????????????public ? boolean ?shouldOverrideUrlLoading(WebView?view,?? ????????????????????????????String?url)?{?? ??????????????????????????? ????????????????????????view.loadUrl(url);?? ????????????????????????return ? true ?;?? ????????????????????}?? ?????????????????????? ????????????????????? ? ?? ????????????????????@Override ?? ????????????????????public ? void ?onPageStarted(WebView?view,?String?url,?? ????????????????????????????Bitmap?favicon)?{?? ?????????????????????????? ????????????????????????super .onPageStarted(view,?url,?favicon);?? ????????????????????}?? ?????????????????????? ????????????????????? ? ?? ????????????????????@Override ?? ????????????????????public ? void ?onPageFinished(WebView?view,?String?url)?{?? ?????????????????????????? ????????????????????????super .onPageFinished(view,?url);?? ????????????????????}?? ?????????????????????? ????????????????????? ? ?? ????????????????????@Override ?? ????????????????????public ? void ?onLoadResource(WebView?view,?String?url)?{?? ?????????????????????????? ????????????????????????super .onLoadResource(view,?url);?? ????????????????????}?? ?????????????????????? ????????????????????? ? ?? ????????????????????@Override ?? ????????????????????public ? void ?onReceivedError(WebView?view,? int ?errorCode,?? ????????????????????????????String?description,?String?failingUrl)?{?? ?????????????????????????? ????????????????????????super .onReceivedError(view,?errorCode,?description,?failingUrl);?? ????????????????????}?? ????????????????};?? ?????????????????? ????????????????webView.setWebChromeClient(new ?HarlanWebChromeClient());?? ????????????????webView.setWebViewClient(new ?HarlanWebViewClient());?? ????????????????? ? ? ? ? ?? ????????????????webView.addJavascriptInterface(new ?Object()?{?? ????????????????????@SuppressWarnings ( "unused" )?? ????????????????????public ? void ?adrdMethod()?{?? ????????????????????????handler.post(new ?Runnable()?{?? ????????????????????????????@Override ?? ????????????????????????????public ? void ?run()?{?? ????????????????????????????????Log.d(TAG,?"js調(diào)用了Android方法" );?? ????????????????????????????}?? ????????????????????????});?? ????????????????????}?? ????????????????},?"demo" );?? ?????????????????? ????????????????btn.setOnClickListener(new ?View.OnClickListener()?{?? ????????????????????@Override ?? ????????????????????public ? void ?onClick(View?v)?{?? ????????????????????????Log.d(TAG,?"Android調(diào)用了js方法" );?? ????????????????????????? ? ? ?? ????????????????????????webView.loadUrl("javascript:rfInfo(" +jsonStr+ ")" );?? ????????????????????}?? ????????????????});?? ?? ????????}?? }??
這只是粗略地學(xué)習(xí)了下android和Javascript的交互,后面的,還需要繼續(xù)深入研究下。
最終在手機(jī)上跑的效果圖:
Demo的下載地址:
http://download.csdn.net/detail/singleton1900/5238800
總結(jié)
以上是生活随笔 為你收集整理的Android与Javascript交互之入门 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。