师大酸梅杨
师大酸梅杨
  • 发布:2018-11-24 15:09
  • 更新:2020-08-14 13:53
  • 阅读:2890

低功耗蓝牙-安卓版插件

分类:5+ SDK
已经使用过一段时间Dcloud公司提供的这套跨平台框架,总体上还是比较喜欢的。  
在这里也是感谢Dcloud公司的奉献。今天也是准备尽一点绵薄之力,贡献出这段时间自己开发的一个蓝牙通信的安卓版插件。写的不好请勿喷,欢迎交流。刚好今天是我的生日,Happy Birthday to myself !哈哈  

进入正题,低功耗蓝牙的通信大致分为三个过程。搜索--》连接--》进行通信。因为也是刚接触蓝牙这个方面,如有理解片面或者不对的地方,还请指正。此处以我方设备的连接过程为例进行讲解。在搜索到蓝牙设备后,需要进行连接(mBluetoothDevice.connectGatt),连接成功后,需要进行一个口令认证,认证成功后,方可继续进行和设备的交互。在连接上蓝牙设备后一定时间内未认证通过,蓝牙设备将自动断开。  

上代码:
JavaScript部分:
我是结合了vue的一些写法,方法体写在了vue的methods中,主要有onStartSearch、onBluetoothConnect、onBluetoothAuth等。
与原始交互方面主要用到了
plus.pluginBLE.PluginInitBle,
plus.pluginBLE.PluginStartSearchBle,
plus.pluginBLE.PluginStopSearchBle,
plus.pluginBLE.PluginConnectBle,
plus.pluginBLE.PluginBleAuth等方法。
这些的方法可见demo工程中PluginBLE.js以及对应BLEPlugin.java文件。

methods: {  
            onStopSearch: function () {  
                var that = this;  
                console.log('onstop');  
                plus.pluginBLE.PluginStopSearchBle(function (aData) {  
                  //停止搜索,命令调用成功后,执行以下逻辑  
                });  
            },  
            onStartSearch: function () {  
                var that = this;  
                console.log('startDiscovery');  
                plus.pluginBLE.PluginInitBle(function (aData) {  
                //初始化一些变量,初始化成功后执行以下逻辑  
                    if (aData.Result == 200) {  
                        that.searching = true;  
                        mui.toast('蓝牙搜索初始化成功,开始搜索');  
                        plus.pluginBLE.PluginStartSearchBle(function (bData) {  
                           //搜索到的设备在这里  
                        }, function (eData) {  
                                mui.toast(eData.Description);  
                        });  
                    }  
                }, function (eData) {  
                        mui.toast(eData.Description);  
                });  
            },  
            onBluetoothConnect: function (item) {  
                var that = this;  
                that.onStopSearch();  
                plus.nativeUI.showWaiting("蓝牙连接中...");  
                plus.pluginBLE.PluginConnectBle(item.bleAddress, function (aData) {  
                    //连接成功  
                    plus.nativeUI.closeWaiting();  
                        that.onBluetoothAuth();  
                }, function (eData) {  
                    //连接失败  
                    plus.nativeUI.closeWaiting();  
                    mui.toast(eData.Description);  
                 
                });  
            },  
            onBluetoothReconnect: function () {  
                this.onBluetoothConnect(this.bluetoothDevice);  
            },  
            onBluetoothAuth: function () {  
                var that = this;  
                plus.nativeUI.showWaiting("连接成功,身份信息验证中...");  
                plus.pluginBLE.PluginBleAuth(function (aData) {  
                    plus.nativeUI.closeWaiting();  
                    mui.toast('认证成功,开始交互');  
                       
                },function (eData) {  
                    plus.nativeUI.closeWaiting();  
                    mui.toast("认证失败,请重试");  
                });  
            },  
           
            onDisconnectBluetoothTap:function(){  
                var that=this;  
                plus.pluginBLE.PluginDisconnectBle(function (aData) {  
                     
                    // mui.toast('设备已断开');  
                });  
            },  
            onCompleteTap: function () {  
                var that=this;  
                
            },  
            onRetryTap: function () {  
                that.retryFlag = false;  
  
            },

以上是Html5展示界面的逻辑。看的可能会比较生硬晦涩。来几张图看看效果。

再来一张硬件照,露个脸O(∩_∩)O哈哈~

java插件层,和jsbridge层直接交互的代码在BLEPlugin.java 中,方法名称也是一一对应起来的。便于大家查看。
低功耗蓝牙交互的过程,需要使用到每个特征值的UUID,这个在开发过程中可以找硬件工程师提供。或者通过一款叫做nRF Connect 的软件进行查看。java层的代码也是在github上找到的,站在巨人的肩膀上^^,懂安卓原生开发的朋友,可以直接借鉴这部分的代码。地址奉上:https://github.com/0xsunsama/Android_ble

没怎么写个,感觉写得好烂。不过话又说回来。烂葱不烂味,哈哈,希望能对有需要的朋友有所帮助。
最后,毕竟项目涉及到一些公司机密,所以对项目有删减。这个就存粹的作为一个demo了。

5 关注 分享
DCloud_heavensoft 崔先生 zhangdaren 7***@qq.com lioil

要回复文章请先登录注册

1***@qq.com

1***@qq.com

向蓝牙写入指令,iOS正常工作,安卓写入成功但是不工作怎么解决
2020-08-14 13:53
IM岁月无痕

IM岁月无痕

兄台,能请教一下关于经典蓝牙(非ble蓝牙)的插件开发问题吗?
2019-11-15 10:58
zhangdaren

zhangdaren

6666
2018-11-24 15:36