Android和HTML5混合開發

Android和HTML5混合開發,廢話不多說開幹:


下面HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello world</title>
<style type="text/css">
	input{
		width: 100%;
		margin: 20px;
		margin-right: 20px; 
		height: 200px;
		font-size: 50px;
		background: #00ff00;
		color: #fff;
	}

	#input{
		background: #fff ;
		color: #000;
	    border:0px;
	}
</style>
</head>
<body>
	<input  type="button" name="開啓系統照相機" value="開啓系統照相機" onclick="onclicks()">

	<input type="button" name="" value="獲取電話號碼" onclick="getiphone()">

	<input type="text" name="text" id="input">

	<script type="text/javascript">

	function getiphone()
	{
		location.href="dmr:getiphone";
	}

	function onclicks() {
		//alert("這幾是web的alert彈框!!!");
		location.href = 'dmr:showcamera';
	}

	function callback(ihpone)
	{
		document.getElementById("input").value="電話號碼是:"+ihpone;
        //alert("電話號碼是:"+ihpone);
	}

	function js(hello)
	{
		alert(hello+"");
	}

	</script>
}

</body>
</html>


location.href:是的html轉場景

dmr:getiphone:是Android端和HTML端定義的協議;定義需要Android和HTML自定義一個爲協議,是兩端之間的通信協議;


下面是Android代碼:

package com.vson.webapp;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private String TAG="MainActivity";
    private WebView mWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWebView= (WebView) findViewById(R.id.WebView);
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);
        webSettings.setSavePassword(false);
        webSettings.setSaveFormData(false);
        webSettings.setGeolocationEnabled(true);
        mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);//設置硬件加速
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webSettings.setLoadWithOverviewMode(true);
        //開瀏覽器 localStorage 存儲用的
        webSettings.setDomStorageEnabled(true);

        webSettings.setSupportZoom(false);
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.setWebViewClient(new MyWebViewClient());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mWebView.setWebContentsDebuggingEnabled(true);
        }


        mWebView.loadUrl("http://192.168.1.104:3000/index.html");
        
    }

public void onClickButton(View v)
{
    String str ="你好";
    mWebView.loadUrl("javascript:js('"+str+"')");
}


   public class MyWebViewClient extends WebViewClient{

       @Override
       public void onPageFinished(WebView view, String url) {
           super.onPageFinished(view, url);
       }

       @Override
       public void onPageStarted(WebView view, String url, Bitmap favicon) {
           super.onPageStarted(view, url, favicon);
       }

       @Override
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
           /**
            * 規則是所有的指令都是以dmr:開頭;
            * dmr:showcamera  ->展示攝像頭
            * dmr:getiphone   ->拿到電話號碼
            *
            *
            */
           if(url.startsWith("dmr:"))
           {
                if("showcamera".equals(url.substring(4)))
                {
                    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivity(intent);
                    return true;
                }else if("getiphone".equals(url.substring(4)))
                {

                    mWebView.loadUrl("javascript:callback(15755170689)");
                    return true;
                }
           }
           //Log.d(TAG, "shouldOverrideUrlLoading: "+url);
           return super.shouldOverrideUrlLoading(view, url);
       }

       @Override
       public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {


           return super.shouldOverrideUrlLoading(view, request);

       }
   }

}

public boolean shouldOverrideUrlLoading(WebView view, String url):在點擊HTML點擊按鈕發送轉場指令的時候,Android攔截HTML的指令,處理命令

mWebView.loadUrl("javascript:callback(15755170689)");回調給HTML頁面,就是把Android處理好的信息給HTML顯示處理等等

上面只是描述一個簡單的原理,有興趣的話可以把WebView簡單的自定義一下,處理成一個小控件

希望對大家有幫助,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章