已经使用过一段时间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了。