生活随笔
收集整理的這篇文章主要介紹了
Android加载网页JavaScript与Java之间的相互调用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
???? 最近項目中涉及到Android中的網(wǎng)絡通信與交互、html5等相關內(nèi)容,由于之前沒仔細研究過,在這里總結(jié)一下,下面是JavaScript與Java相互調(diào)用的一個小例子,廢話不多說,直接上代碼:
<html>
<meta http-equiv="Content-Type" content="text/html;charset=GBK"><head>
<script type="text/javascript">function ok() {window.player.playOk();}function wrong() {window.player.playWrong();}function show_alert() {alert("這是一個警告!")}function show_confirm() {var v = confirm("確定你是個好人?")if (v == true) {alert("你選擇了是!");} else {alert("你選擇了否!");}}function disp_prompt() {var name = prompt("請輸入您的名字", "Jerome")if (name != null && name != "") {document.getElementById("content").innerHTML = "你好!" + name;}}function java_call() {document.getElementById("content").innerHTML = "Java代碼調(diào)用你了";}
</script>
</head>
<body><input type="button" οnclick="ok()" value="OK" /><br /><input type="button" οnclick="wrong()" value="Warning"><br /><input type="button" οnclick="show_alert()" value="警告"><br /><input type="button" οnclick="show_confirm()" value="刪除"><br /><input type="button" οnclick="disp_prompt()" value="顯示提示框" /><br /><p id="content"></p>
</body>
</html>
這是html的代碼,不接觸web前段,js都不怎么會寫了,簡單的函數(shù)湊合用了,嘿嘿。
package com.example.jsjava;import java.io.IOException;import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;/*** * ClassName:MainActivity* * @author Jerome Song* @version* @since Ver 1.1* @Date 2013 2013-5-17 下午11:33:05* * @see*/
public class MainActivity extends Activity {private WebView webview = null;private MediaPlayer player;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);player = new MediaPlayer();initWebView();}private void initWebView() {webview = (WebView) super.findViewById(R.id.webview);webview.getSettings().setJavaScriptEnabled(true); // 啟用JavaScriptwebview.getSettings().setBuiltInZoomControls(true); // 控制頁面縮放webview.addJavascriptInterface(new PlayerMethod(), "player");// 添加Js函數(shù)調(diào)用接口webview.setWebChromeClient(new WebChromeClient() {@Override// 彈出警告框操作public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {Dialog dialog = new AlertDialog.Builder(MainActivity.this).setMessage(message).setPositiveButton(android.R.string.ok,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.cancel();// 這里我們通過Webview.loadUrl()方法去調(diào)用js中的函數(shù)webview.loadUrl("javascript:java_call()");}}).create();dialog.setCancelable(false);// 避免點Back取消,那樣js接收不到任何返回信息dialog.show();return true;}//@Override// 彈出確認框操作public boolean onJsConfirm(WebView view, String url,String message, final JsResult result) {Dialog dialog = new AlertDialog.Builder(MainActivity.this).setIcon(android.R.drawable.stat_sys_warning).setMessage(message).setPositiveButton("是",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.confirm();}}).setNegativeButton("否",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.cancel();}}).create();dialog.setCancelable(false);dialog.show();return true;}// 提示@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {final EditText text = new EditText(MainActivity.this);text.setHint(defaultValue);Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle(message).setView(text).setPositiveButton("確定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.confirm(text.getText().toString());}}).setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.cancel();}}).create();dialog.setCancelable(false);dialog.show();return true;}});webview.loadUrl("file:///android_asset/html/play_js.html");}class PlayerMethod {Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {try {if (msg.what == 1) {play("ok.mp3");} else {play("wrong.mp3");}} catch (IOException e) {e.printStackTrace();}};};AssetManager asm = getResources().getAssets();public void playOk() throws IllegalArgumentException,IllegalStateException, IOException {handler.sendEmptyMessage(1);}public void playWrong() throws IOException {handler.sendEmptyMessage(0);}private void play(String fileName) throws IOException {if (player.isPlaying()) {player.stop();}player.reset();AssetFileDescriptor afd = asm.openFd(fileName);player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),afd.getLength());player.prepare();player.start();}}}
有不對的地方希望大家能給予批評指正,多多交流,謝謝。
源碼地址:http://download.csdn.net/detail/songzhiyong1121/5400403
總結(jié)
以上是生活随笔為你收集整理的Android加载网页JavaScript与Java之间的相互调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。