package com.example.localbrowser; /*** * Excerpted from "Hello, Android", * published by The Pragmatic Bookshelf. * Copyrights apply to this code. It may not be used to create training material, * courses, books, articles, and the like. Contact us if you are in doubt. * We make no guarantees that this code is fit for any purpose. * Visit http://www.pragmaticprogrammer.com/titles/eband3 for more book information. ***/ import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class LocalBrowser extends Activity { private static final String TAG = "LocalBrowser"; final Handler handler = new Handler(); private WebView webView; private TextView textView; private Button button; /** Object exposed to JavaScript */ public class AndroidBridge { Context mContext; public void showToast(String inArg) { // must be final final String arg = inArg; handler.post(new Runnable() { @Override public void run() { // Log.d(TAG, "callAndroid(" + arg + ")"); textView.setText(arg); } }); Toast.makeText(mContext, arg, Toast.LENGTH_SHORT).show(); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Find the Android controls on the screen webView = (WebView) findViewById(R.id.web_view); textView = (TextView) findViewById(R.id.text_view); button = (Button) findViewById(R.id.button); // Rest of onCreate follows... // Turn on JavaScript in the embedded browser webView.getSettings().setJavaScriptEnabled(true); final AndroidBridge mBridge = new AndroidBridge(); // Expose a Java object to JavaScript in the browser webView.addJavascriptInterface(mBridge, "AndroidFunction"); // Set up a function to be called when JavaScript tries // to open an alert window webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(final WebView view, final String url, final String message, JsResult result) { Log.d(TAG, "onJsAlert(" + view + ", " + url + ", " + message + ", " + result + ")"); Toast.makeText(LocalBrowser.this, message, 3000).show(); result.confirm(); return true; // I handled it } }); // Load the web page from a local asset webView.loadUrl("file:///android_asset/index.html"); // This function will be called when the user presses the // button on the Android side button.setOnClickListener(new OnClickListener() { /* * (non-Javadoc) * * @see android.view.View.OnClickListener#onClick(android.view.View) */ public void onClick(View view) { Log.d(TAG, "onClick(" + view + ")"); webView.loadUrl("javascript:callJS('Hello from Android')"); } }); } }