最近一直搞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)两个都好了以后,把写好的插件整合到 你的项目中。