歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Activity 和 HTML 數據通信

Android Activity 和 HTML 數據通信

日期:2017/3/1 10:50:45   编辑:Linux編程

Android activity 和 html一起開發難免有之間通訊的問題。今天簡單測試了一下:

代碼很簡單:

activity:

  1. package com.lmn.webview.html;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.AlertDialog.Builder;
  5. import android.content.DialogInterface;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.Window;
  10. import android.webkit.JsResult;
  11. import android.webkit.WebChromeClient;
  12. import android.webkit.WebSettings;
  13. import android.webkit.WebStorage;
  14. import android.webkit.WebView;
  15. import android.widget.Toast;
  16. public class MainActivity extends Activity {
  17. private WebView mWebView;
  18. /** Called when the activity is first created. */
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. mWebView = (WebView) findViewById(R.id.webview);
  24. WebSettings webSettings = mWebView.getSettings();
  25. webSettings.setSavePassword(false);
  26. webSettings.setSaveFormData(false);
  27. webSettings.setJavaScriptEnabled(true);
  28. webSettings.setSupportZoom(true);
  29. // Horizontal水平方向,Vertical豎直方向
  30. mWebView.setHorizontalScrollBarEnabled(false);
  31. mWebView.setVerticalScrollBarEnabled(false);
  32. mWebView.setWebChromeClient(new WebChromeClient() {
  33. // 處理javascript中的alert
  34. public boolean onJsAlert(WebView view, String url, String message,
  35. final JsResult result) {
  36. // 構建一個Builder來顯示網頁中的對話框
  37. Builder builder = new Builder(MainActivity.this);
  38. builder.setTitle("Alert");
  39. builder.setMessage(message);
  40. builder.setPositiveButton(android.R.string.ok,
  41. new AlertDialog.OnClickListener() {
  42. public void onClick(DialogInterface dialog,
  43. int which) {
  44. // 點擊確定按鈕之後,繼續執行網頁中的操作
  45. result.confirm();
  46. }
  47. });
  48. builder.setCancelable(false);
  49. builder.create();
  50. builder.show();
  51. return true;
  52. };
  53. // 處理javascript中的confirm
  54. public boolean onJsConfirm(WebView view, String url,
  55. String message, final JsResult result) {
  56. Builder builder = new Builder(MainActivity.this);
  57. builder.setTitle("confirm");
  58. builder.setMessage(message);
  59. builder.setPositiveButton(android.R.string.ok,
  60. new AlertDialog.OnClickListener() {
  61. public void onClick(DialogInterface dialog,
  62. int which) {
  63. result.confirm();
  64. }
  65. });
  66. builder.setNegativeButton(android.R.string.cancel,
  67. new DialogInterface.OnClickListener() {
  68. public void onClick(DialogInterface dialog,
  69. int which) {
  70. result.cancel();
  71. }
  72. });
  73. builder.setCancelable(false);
  74. builder.create();
  75. builder.show();
  76. return true;
  77. };
  78. // 設置網頁加載的進度條
  79. public void onProgressChanged(WebView view, int newProgress) {
  80. MainActivity.this.getWindow().setFeatureInt(
  81. Window.FEATURE_PROGRESS, newProgress * 100);
  82. super.onProgressChanged(view, newProgress);
  83. }
  84. // 設置應用程序的標題title
  85. public void onReceivedTitle(WebView view, String title) {
  86. MainActivity.this.setTitle(title);
  87. super.onReceivedTitle(view, title);
  88. }
  89. public void onReachedMaxAppCacheSize(long spaceNeeded,
  90. long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
  91. quotaUpdater.updateQuota(spaceNeeded * 2);
  92. }
  93. });
  94. mWebView.addJavascriptInterface(new JavaScriptInterface(), "demo");
  95. mWebView.loadUrl("file:///android_asset/demo.html");
  96. }
  97. final class JavaScriptInterface {
  98. JavaScriptInterface() {
  99. }
  100. public int mydata() {
  101. return 10;
  102. }
  103. public void DataFromHtml(String resHtml) {
  104. Message m = new Message();
  105. m.obj = resHtml;
  106. h.sendMessage(m);
  107. }
  108. }
  109. Handler h = new Handler() {
  110. public void handleMessage(Message msg) {
  111. Toast.makeText(MainActivity.this, msg.obj + "", Toast.LENGTH_LONG)
  112. .show();
  113. }
  114. };
  115. }

HTML:

  1. <!DOCTYPE html >
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=GBK">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, initial-scale = 1.0 ,user-scalable=no , maximum-scale = 1.0 ">
  6. <link rel="stylesheet" href="css/jquery.mobile.min.css" />
  7. <script src="js/jquery-1.7.1.min.js"></script>
  8. <title>Insert title here</title>
  9. <script type="text/javascript">
  10. $(function() {
  11. $("#btn_getHtml").click(function(event) {
  12. demo.DataFromHtml("From Html");
  13. });
  14. $("#btn_getActivity").click(function(event) {
  15. alert(demo.mydata());
  16. });
  17. });
  18. </script>
  19. <script src="js/jquery.mobile.min.js"></script>
  20. </head>
  21. <body>
  22. <div data-role="page" id="home">
  23. <div data-role="content">
  24. -----------這是一個html頁面----------
  25. <button id="btn_getActivity">
  26. 獲取Activity中的數據
  27. </button>
  28. <button id="btn_getHtml">
  29. 獲取Html中的數據
  30. </button>
  31. </div>
  32. </div>
  33. </body>
  34. </html>
Copyright © Linux教程網 All Rights Reserved