最近一直搞Dcloud ,這是HTML5版本的開發,打包時候,可以打包成 apk 和ipa 分別運行在安卓和ios 機器上面,
但是這里面的資料很少,遇到問題,之后只能自己鑽研總結,
現在有這么一個需求,需要實現藍牙開啟后,監聽藍牙接口傳遞的數據,然后呈現給用戶。我試了很多方法,之前是在 HTML5上直接寫方法,監聽藍牙狀態,但是jS是單線程,直接把進程阻塞了其他的啥也干不了,而且時間長了監聽,總會莫名中斷,
這是我當時寫的算法
http://ask.dcloud.net.cn/publish/article/875
這是直接在html5上監聽藍牙,后來多次測量之后發現,根本不能用。
使用了多種方法,比如 使用work開啟多線程,但是問題是 work開啟了但是無法調用plus對象,沒有任何用處。
使用異步調用,也無法實現,
后來經過多次詢問大牛之后,發現,這個問題目前最好使用html5插件 的形式解決,寫完了插件,然后,用html點擊之后,觸發按鈕調用原生的藍牙監聽程序。
具體的文檔在這里:
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)兩個都好了之后,把寫好的插件整合到 你的項目中。