Hybrid開發(fā)——Android與H5的親密接觸

Hybrid開發(fā)在目前的市場上已經(jīng)非常普遍,它是一種介于web-app、native-app這兩者之間的app,兼具“Native App良好交互體驗的優(yōu)勢”和“Web App跨平臺開發(fā)的優(yōu)勢”。

今天我們就來講講如何使用Android和H5實現(xiàn)一個簡單的Hybrid APP。在正式開始之前,我們先給自己定兩個小目標:

1、在Android應用里面,通過webview組件嵌入一個H5頁面,并正常顯示該頁面;

2、實現(xiàn)Android與H5之間的簡單交互;

備注:Android環(huán)境的搭建與配置由小伙伴自主完成,筆者在這里就不做介紹了。


了解WebView


WebView 是一個用來顯示 Web 網(wǎng)頁的控件,該控件的使用跟其他控件沒什么區(qū)別。只不過WeView 控件的功能比較豐富,因為它就是一個微型瀏覽器,包含一個瀏覽器該有的基本功能,例如:滾動、縮放、前進、后退下一頁、搜索、執(zhí)行 Js等功能。

Android布局文件


WebView有四種方式來加載網(wǎng)頁:

方式一:webView.loadUrl("http://keithxiaoy.com");? ?//加載網(wǎng)頁鏈接

方式二:webView.loadUrl("file:///android_asset/index.html");? ?//加載本地assets目錄下的網(wǎng)頁

方式三:webView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");? ?//加載手機SD卡的html頁面

方式四:webView.loadData(String data,String mimeType,String encoding)??//加載 HTML 頁面的一小段內(nèi)容。參數(shù)1:需要截取展示的內(nèi)容、參數(shù)2:展示內(nèi)容的類型、參數(shù)3:字節(jié)碼

我們?yōu)榱苏{(diào)試的方便,我們選擇第二種方式? ---?加載本地assets目錄下的網(wǎng)頁,為此我們需要在相應的位置新建html文件:

網(wǎng)頁文件位置


Android嵌入H5頁面


第一步:在AndroidManifest.xml文件配置網(wǎng)絡(luò)權(quán)限

<uses-permissionandroid:name="android.permission.INTERNET"/>

第二步:在java文件中獲取WebView實例對象,并調(diào)用loadUrl方法載入html文件

java文件


index.html文件


至此,我們已經(jīng)將H5頁面嵌入到Android應用里面,我們使用Android虛擬機進行查看:

H5嵌入到Android應用


H5調(diào)用Android的方法


首先定義一個JsInterface類,這個類是Native提供給H5的接口集合:

JsInterface類

setTextContent方法的作用是更改Android應用中TextView組件的內(nèi)容。接下來我們需要將這個接口類的實例傳遞給html文件的window對象,而這個傳遞過程要借助于webview:

//? java文件

jsInterface = new JsInterface();


// 把布局文件的TextView對象綁定到j(luò)sInterface對象的textView屬性上,便于jsInterface對象操作UI組件

jsInterface.textView = (TextView)findViewById(R.id.textView);


// Android提供的Js與Native通信的官方解決方案:這個方法的作用是,將 java 對象注入到 Js 中直接作為window的某一變量來使用

//?jsInterface:接口對象;? ? ? ?AndroidNative:接口對象掛載到window的屬性名

webView.addJavascriptInterface(jsInterface,"AndroidNative");

完成以上內(nèi)容以后,我們在H5頁面上給按鈕綁定一個點擊事件,并在處理函數(shù)中調(diào)用native方法:

H5調(diào)用Native方法

這樣一來,我們點擊一下H5頁面上的按鈕,就可以更改TextView組件的內(nèi)容了。


Android調(diào)用H5的方法


第一步:啟用js支持

使用setJavaScriptEnabled方法啟用js支持


第二步:獲取Android應用的Button組件,并綁定相應的點擊事件監(jiān)聽器

btnLogin = (Button)findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(new View.OnClickListener() {

????@Override

????public void onClick(View arg0) {

????????//實際處理button的click事件的方法

????????webView.loadUrl("javascript:pauseVideo()");

????}

});


第三步:現(xiàn)在html文件中定義js方法,然后通過webView的loadUrl方法,調(diào)用html里面定義的js方法

//?pauseVideo是定義在html文件里面的函數(shù)

webView.loadUrl("javascript:pauseVideo()");

注意:在不同的Android版本中,Native調(diào)用JS的方式是有變化的,在Android4.4之前使用loadUrl的方法,在4.4以后(包括4.4),使用的是另外一種方法:

mWebView.evaluateJavascript("javascript: 方法名('參數(shù),需要轉(zhuǎn)為字符串')", new ValueCallback() {

????@Override

????public void onReceiveValue(String value) {

????????//這里的value即為對應JS方法的返回值

????}

});


結(jié)語


至此,我們已經(jīng)實現(xiàn)了一個簡單的Hybrid APP。筆者已將相關(guān)代碼上傳到https://github.com/Samuel2306/Hybrid_Android_H5。有興趣的小伙伴可以自己去動手試一試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。