zoukankan      html  css  js  c++  java
  • Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现

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

  • 相关阅读:
    ADB命令大全
    Backup your Android without root or custom recovery -- adb backup
    Content portal for Pocketables Tasker articles
    Is there a way to detect if call is in progress? Phone Event
    Tasker to proximity screen off
    Tasker to detect application running in background
    Tasker to create toggle widget for ES ftp service -- Send Intent
    Tasker to proximity screen on
    Tasker to answer incoming call by pressing power button
    Tasker to stop Poweramp control for the headset while there is an incoming SMS
  • 原文地址:https://www.cnblogs.com/aspirant/p/6000894.html
Copyright © 2011-2022 走看看