Android之與h5交互

》背景:

隨着微信小程序的流行,市面上颳起了一股H5的浪潮;甚至,有流言——H5將取代傳統app。對此,本人不做評論。
然而事實證明,她並不能取代。時間也爲我們篩選出了一種做法——混合開發,即使用H5來作爲程序中的某些界面。那麼,問題來了,我們該怎麼“混合”呢?
我們知道app中,最重要的一點就是“交互”,解決了交互問題,就自然而然地“混合”了。下面,交互的方法。

》與H5交互:

1.配置:

》提供js支持:
 mWeb.getSettings().setJavaScriptEnabled(true);
》提供JS調用的方法(我們一般寫在一個類裏,便於管理):
(tips:提供的對外方法必須被@JavascriptInterface註解)
 /**
     * provide methods for js
     */
    class JavaMethod {
        @JavascriptInterface
        public void jump() {
            JumpUtils.simpleJump(MainActivity.this, WebActivity.class);
        }

        @JavascriptInterface
        public void search() {
            ToastUtils.simpleToast(MainActivity.this, "invoke by js");
        }
    } 
》提供JS調用接口:
 mWeb.addJavascriptInterface(new JavaMethod(), "javaMethod");//param1,方法類對象;param2,對象名(供js通過對象調用裏賣弄的方法)    

2.JS調用java方法

<a onClick="window.javaMethod.jump()"> <!--看見沒,javaMethod就是我們上面提供的對象名-->
    <div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;">
        <img id="icon" src="code_scan.png"/><br>
        Click me!
    </div>
</a>

3.JAVA調用JS方法

mWeb.loadUrl("javascript:goBaidu()");//直接以javascript:+js方法名

》完整測試demo

1.activity

public class MainActivity extends AppCompatActivity {
    private WebView mWeb;
    private Button updateBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        this.updateBtn = (Button) findViewById(R.id.update_btn);
        this.updateBtn.setOnClickListener(mOnClickListener);
        mWeb = (WebView) findViewById(R.id.mWeb);
        mWeb.getSettings().setJavaScriptEnabled(true);
        mWeb.loadUrl("file:///android_asset/android_js.html");

        mWeb.addJavascriptInterface(new JavaMethod(), "javaMethod");
    }

    /**
     * provide methods for js
     */
    class JavaMethod {
        @JavascriptInterface
        public void jump() {
            JumpUtils.simpleJump(MainActivity.this, WebActivity.class);
        }

        @JavascriptInterface
        public void search() {
            ToastUtils.simpleToast(MainActivity.this, "invoke by js");
        }
    }


    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.update_btn:
                    mWeb.loadUrl("javascript:goBaidu()");
                    break;

            }
        }
    };
}

2.JS

(注意:本地網頁及網頁引用圖片均放在assets文件夾下)

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>android and js</title>
</head>

<body>
<p>It is my first js demo</p>
<hr width="80%"/>
<script type="text/javascript">
         function greed(){
            alert("It's my first h5 page");
            document.getElementById("icon").src="code_add.png";
         }

         function goBaidu(){
         window.location.href="https://www.baidu.com/"
         <!--window.open("https://www.baidu.com/")-->
         }
         <!--// greed();-->


</script>

<!-- Calls into the javascript interface for the activity -->
<a onClick="window.javaMethod.jump()">
    <div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;">
        <img id="icon" src="code_scan.png"/><br>
        Click me!
    </div>
</a>
<a onClick="window.javaMethod.search()">
    <div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;">
        <img id="goBaidu" src="code_add.png"/><br>
        百度一下!
    </div>
</a>
</body>
</html> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章