android与html5之间可以相互交互,即android中的类可以调用javascript中的函数,javascript可以调用android中的类的方法。

这个例子中,html5完成数据库的操作,包括数据库的创建、表的创建、数据的增删查改等,还有html5的定位功能。

先看效果图:



布局文件:main.xml

<?xml version="1.0" encoding="utf-8"?>    

html5文件:index.html

JavaScript itme


android类:MainActivity.class

package com.yarin.android.html5;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.Context;import android.content.DialogInterface;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.webkit.GeolocationPermissions;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebStorage;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.TextView;//关于android2.3中javascript交互的问题//http://code.google.com/p/android/issues/detail?id=12987public class MainActivity extends Activity {private WebView webView = null;private Handler handler = new Handler();private Button button = null;final class InJavaScript {        public void runOnAndroidJavaScript(final String str) {        handler.post(new Runnable() {                public void run() {                     TextView show = (TextView) findViewById(R.id.textview);                    show.setText(str);                }            });        }    }    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                button = (Button) findViewById(R.id.button);        button.setOnClickListener(new OnClickListener() {            public void onClick(View arg0) {            //调用javascript中的方法,传入string数据                webView.loadUrl("javascript:getFromAndroid('the data is from android!')");            }        });                        webView = (WebView) findViewById(R.id.webview);                //把本类的一个实例添加到js的全局对象window中,        //这样就可以使用window.injs来调用它的方法        webView.addJavascriptInterface(new InJavaScript(), "injs");        //设置支持JavaScript脚本WebSettings webSettings = webView.getSettings();  webSettings.setJavaScriptEnabled(true);//设置可以访问文件webSettings.setAllowFileAccess(true);//设置支持缩放webSettings.setBuiltInZoomControls(true);webSettings.setDatabaseEnabled(true);  String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();webSettings.setDatabasePath(dir);//使用localStorage则必须打开webSettings.setDomStorageEnabled(true);webSettings.setGeolocationEnabled(true);//webSettings.setGeolocationDatabasePath(dir);//设置WebViewClientwebView.setWebViewClient(new WebViewClient(){       public boolean shouldOverrideUrlLoading(WebView view, String url) {           view.loadUrl(url);           return true;       }  public void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}public void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}});//设置WebChromeClientwebView.setWebChromeClient(new WebChromeClient(){//处理javascript中的alertpublic boolean onJsAlert(WebView view, String url, String message, final JsResult result) {//构建一个Builder来显示网页中的对话框Builder builder = new Builder(MainActivity.this);builder.setTitle("Alert");builder.setMessage(message);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setCancelable(false);builder.create();builder.show();return true;};//处理javascript中的confirmpublic boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {Builder builder = new Builder(MainActivity.this);builder.setTitle("confirm");builder.setMessage(message);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setNegativeButton(android.R.string.cancel,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.cancel();}});builder.setCancelable(false);builder.create();builder.show();return true;};@Override//设置网页加载的进度条public void onProgressChanged(WebView view, int newProgress) {MainActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);super.onProgressChanged(view, newProgress);}//设置应用程序的标题titlepublic void onReceivedTitle(WebView view, String title) {MainActivity.this.setTitle(title);super.onReceivedTitle(view, title);}public void onExceededDatabaseQuota(String url,String databaseIdentifier, long currentQuota,long estimatedSize, long totalUsedQuota,WebStorage.QuotaUpdater quotaUpdater) {quotaUpdater.updateQuota(estimatedSize * 2);}public void onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback callback) {callback.invoke(origin, true, false);super.onGeolocationPermissionsShowPrompt(origin, callback);}public void onReachedMaxAppCacheSize(long spaceNeeded,long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {quotaUpdater.updateQuota(spaceNeeded * 2);}});// 覆盖默认后退按钮的作用,替换成WebView里的查看历史页面  webView.setOnKeyListener(new View.OnKeyListener() {public boolean onKey(View v, int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN) {if ((keyCode == KeyEvent.KEYCODE_BACK)&& webView.canGoBack()) {webView.goBack();return true;}}return false;}});webView.loadUrl("file:///android_asset/index.html");    } }



更多相关文章

  1. Android NDK开发使用以及so文件生成和注意事项
  2. [转]快速切换Android工程版本的方法
  3. 关于获取Android中文件内容有感
  4. iOS开发-Android 录制的mp4视频文件在IOS中无法播放问题
  5. Android:使用JDBC链接MySQL数据库
  6. Android中使用Handler机制更新UI的两种方法
  7. Android通过HttpURLConnection上传多个文件至服务器 - 流传输

随机推荐

  1. Android用户定位Google Map显示地图
  2. Android(安卓)SSO 相关文章
  3. Android(安卓)ScrollView + ListView嵌套
  4. android cupcake源码编译问题
  5. android获取联系人所有内容
  6. Android(安卓)在线升级APK
  7. Android再按一次退出程序实现方法
  8. android studio 打包release出现的错误
  9. android 读取通讯录
  10. android Gallery做图片滚动,每次滑动翻一