初次嘗試用HTML/JS開發Android。


由於業務需求和大趨勢導致,目前縱觀很多APP。很多都是用H5+native的方式去開發。關於wepApp和nativeApp它們之前的是是非非就不說了。

下面是利用H5應該是JS去調用本地Android的代碼。

不是什么特別高深的東西。

第一布局:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 3     android:layout_height="match_parent" tools:context=".MainActivity">
 4 
 5    <WebView
 6        android:id="@+id/wv_web"
 7        android:layout_width="match_parent"
 8        android:layout_height="match_parent"></WebView>
 9 
10 </RelativeLayout>

第二native代碼。

 setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.wv_web);
        webView.loadUrl("file:///android_res/raw/test.html");
        webView.setVerticalScrollBarEnabled(false);
        webView.setHorizontalScrollBarEnabled(false);
        webView.getSettings().setJavaScriptEnabled(true); //加上這句話才能使用javascript方法;
        webView.addJavascriptInterface(new PayJavaScriptInterface(), "demo");
 1  final class PayJavaScriptInterface {
 2         PayJavaScriptInterface() {
 3         }
 4         @JavascriptInterface
 5         public String getUserinfo()  {
 6             return "getUserinfo";
 7         }
 8 
 9 
10         @JavascriptInterface
11         public boolean needLogin()  {
12             return true;
13         }
14         @JavascriptInterface
15         public void haha()  {
16             Toast.makeText(MainActivity.this,"hahaa",Toast.LENGTH_SHORT).show();
17             Log.e("sssssssssssssssssssssss","sdfddddddddd");
18         }
19     }

第三HTML里面的代碼:

test.html

<!DOCTYPE HTML>
<html>

<head>

    <meta charset="UTF-8">

    <title>交互Demo</title>

    <meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport">

</head>



<body>

getUserinfo:

<div id="userinfo"></div>

<input value="立即報名" type="button" onClick="baoming();" /><br>



<script>

/*var rs=window.om.getUserinfo();

document.getElementById('userinfo').innerHTML=rs;*/

var rs=window.demo.getUserinfo();

var obj = eval ("(" + rs + ")");

if(obj.status){

document.getElementById('userinfo').innerHTML=obj.data.nickname;

}

function baoming(){

if(window.demo.needLogin()){

location.href='test1.html';

}

}

</script>

</body>

</html>

test1.html代碼:

 1 <!DOCTYPE HTML>
 2 <html>
 3 <body>
 4 <input value="立即報名" type="button" onClick="haha();"/>
 5 
 6 </body>
 7 
 8 <script>
 9 
10 function haha(){
11 
12 window.demo.haha();
13 
14 }
15 
16 </script>
17 
18 </html>

這樣就可以實現了。

需要注意的點:

1.這里我加載的是本地app里面的html,所以使用的方式是

   webView.loadUrl("file:///android_res/raw/test.html");

關於加載網頁的可以直接,寫上url,而我的html是的放在raw目錄里面。使用的AndroidStudio。

2.設置了下webView的相關配置信息。具體代碼有備注,或者可以查閱其他相關資料。

3.在本地寫:

webView.addJavascriptInterface(new PayJavaScriptInterface(), "demo");

其中第一個參數就是我下面寫的一個類,第二個參數是在HTML里面的JS需要使用的。注意,在HTML里面我window后面跟的demo和這里是一樣的,也必須保持一致才能成功調用。


然后就是你在JS里面調用了。這樣應該就ok了。今天還繼續研究下這玩意。


突然感覺不是特別清晰,這樣說吧,這個demo這個就代碼我們第一個參數new出的對象,然后我們在JS里面寫window.demo,代表我PayJavaScriptInterface這個對象的實例,也就是我在第一個參數這邊new出來的。然后再window.demo.haha();其實就是調用了PayJavaScriptInterface里面的haha的方法。然后就執行haha里面的代碼。

這樣表達應該還算清晰!





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM