Dcloud HTML5 監聽藍牙設備 調用 原生安卓實現

最近一直搞Dcloud ,這是HTML5版本的開發,打包時候,能夠打包成 apk 和ipa 分別運行在安卓和ios 機器上面,html

可是這裏面的資料不多,遇到問題,以後只能本身鑽研總結,html5

如今有這麼一個需求,須要實現藍牙開啓後,監聽藍牙接口傳遞的數據,而後呈現給用戶。我試了不少方法,以前是在 HTML5上直接寫方法,監聽藍牙狀態,可是jS是單線程,直接把進程阻塞了其餘的啥也幹不了,並且時間長了監聽,總會莫名中斷,ios

這是我當時寫的算法算法

http://ask.dcloud.net.cn/publish/article/875json

這是直接在html5上監聽藍牙,後來屢次測量以後發現,根本不能用。多線程

使用了多種方法,好比 使用work開啓多線程,可是問題是 work開啓了可是沒法調用plus對象,沒有任何用處。app

使用異步調用,也沒法實現,異步

後來通過屢次詢問大牛以後,發現,這個問題目前最好使用html5插件 的形式解決,寫完了插件,而後,用html點擊以後,觸發按鈕調用原生的藍牙監聽程序。ui

具體的文檔在這裏:.net

http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/66

具體的實現方法,這篇文檔,我至少要讀了5遍左右,終於寫出了插件,成功的調用了原生監聽程序。

要知道若是咱們要寫安卓插件的話,只能使用離線打包,目前不支持在線打包。

所以若是寫原生插件,首先要會離線打包,使用安卓程序打包,

具體的打包流程請參考

http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/38

我建議你們多多幾遍,須要注意的事項:

(1) 離線打包要下載他們的sdk 地址:

http://ask.dcloud.net.cn/article/103

(2)注意:由於其它第三方的SDK也使用到包名相關資源配置,因此須要在AndroidManifest.xml將全部「io.dcloud.HBuilder.Hello」替換成要修改爲的包名。

(3)打開assets -> apps 目錄,將下面「HelloH5」目錄名稱修改成應用manifest.json中的id名稱(這步很是重要,不然會致使應用沒法正常啓動),並將全部應用資源拷貝到其下的www目錄中:

(4)打開assets -> data下的control.xml文件,修改appid值:

其中appid值爲HBuilder應用的appid,必須與應用manifest.json中的id值徹底一致;appver爲應用的版本號,用於應用資源的升級,必須保持與manifest.json中的version -> name值徹底一致;version值爲應用基座版本號(plus.runtime.innerVersion返回的值),不要隨意修改。

學會了如何打包以後,咱們能夠作一個很小的打包的源程序,專門用來打包用,

而後下一步就是寫插件了:

具體文檔在:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/66

具體的方法就是,先使用安卓源程序上寫好監聽的方法,而後把html5的文件放到資源文件夾assess底下,調用寫好的安卓監聽方法;

 具體須要注意的地方:

(1)首先要下載HTML5+基座的Android版SDK點擊下載解壓後將HBuilder-Integrate工程導入到ADT中。 這裏你會下載到好幾個文件夾,有一個HBuilder-hello的 這個是離線打包用的,還有個是 HBuilder-Integrate,這個已經寫好了插件了,運行一下看看

(2) 關聯JS插件名和原生類

在編寫擴展插件時須要修改「/assets/data」中properties.xml文件,在其中添加JS對象名稱和Android包的類名對應關係,SDK會根據對應的類名查找並生成相應的對象並執行對應的邏輯。 

 

注意這裏是在feature 的屬性底下加上這個,例子中在service底下加了,若是不在feature底下加的話會報錯,缺乏plusintest插件的權限。

"應用未添加plugintest權限,請在manifest.json文件中permissions節點進行配置,"
出現這個錯誤,怎麼解決

就是這個錯誤:

(3)兩個都好了以後,把寫好的插件整合到 你的項目中。

相關文章
相關標籤/搜索