用了两天的时间,把这个称为智石的蓝牙模块熟悉了一下,现在整理一下。
智石,英文名为brightBeacon,看字面意思,和apple的13年推出的iBeacon协议有点关系,事实确实如此。
一、智石的特点如下:
1、遵循iBeacon协议。
遵循iBeacon协议的设备工作方式是:配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad(现在android4.3以上且支持BLE的终端设备也支持Beacon协议)上运行一资讯告知服务器,或者由服务器向顾客发送折扣券及进店积分。此外,还可以在家电发生故障或停止工作时使用iBeacon向应用软件发送资讯。(摘自百度百科)
大白话就是遵循iBeacon协议的蓝牙模块,会一直向外广播,智能设备靠近蓝牙模块的时候,通过商户支持的app来判断靠近的具体是哪个蓝牙模块(通过id来区分),然后app读取服务器中该id对应的相关数据,显示在app中。
2、1颗纽扣电池,官方宣传可续航1-2年,实际使用估计在6个月左右
3、智石官方的资料:
①sdk地址:https://github.com/BrightBeacon/BrightBeacon_Android_SDK(api文档、sdk)
②demo代码讲解:http://www.brtbeacon.com/home/docuemt_andriod.shtml(sdk中得demo的关键代码讲解)
③demo地址:http://www.brtbeacon.com/home/sdkdownload.shtml(官方做的一些体验demo,很烂)
二、智石开发中大致流程
1、扫描附近的支持IBeacon设备
//设置扫描的回调函数
beaconManager.setRangingListener(new RangingListener() {
@Override
public void onBeaconsDiscovered(RangingResult rangingResult) {
//rangingResult.beacons为扫描到的Beacon集合;
//rangingResult.sortBeacons为根据感应距离排序后的Beacon集合
}
});
//开始扫描
beaconManager.startRanging(ALL_BRIGHT_BEACONS);
2、选择一个并连接IBeacon
//连接的回调函数
connection = new BRTBeaconConnection(splash.this,beacon, createConnectionCallback());
//开始连接
connection.connect();
3、连接后可以进行设备信息(名称、发射功率等)的读写
在上一步中的回调函数中:
private com.brtbeacon.sdk.connection.ConnectionCallback createConnectionCallback() {
CommonUtils.LogWuwei(tag, "开始连接。。。");
return new ConnectionCallback() {
@Override
public void onAuthenticated(final BeaconCharacteristics beaconChars)
{
CommonUtils.LogWuwei(tag, "连接成功");
StringBuilder sb = new StringBuilder()
.append("1、电量: ").append(beaconChars.getBattery()).append("%\n").
append("2、名称").append(beaconChars.getName()).append("%\n")
.append("3、温度:".append(beaconChars.getTemperature()).append("℃").append("%\n")
.append("4、固件版本: ").append(beaconChars.getVersion()).append("\n");
}
@Override
public void onAuthenticationError()
{
CommonUtils.LogWuwei(tag, "连接失败");
}
@Override
public void onDisconnected()
{
CommonUtils.LogWuwei(tag, "连接断开");
CommonUtils.showToast(getApplicationContext(), "状态: 连接断开");
}
};
}
4、发现进入或者离开区域的回调
//设置扫描回调
beaconManager.setMonitoringListener(new MonitoringListener() {
@Override
public void onEnteredRegion(BRTRegion arg0, List<BRTBeacon> arg1) {
//进入感应区域
}
@Override
public void onExitedRegion(BRTRegion arg0, List<BRTBeacon> arg1) {
//离开感应区域
}
});
//开始监控感应情况
region = new BRTRegion("rid", beacon.getProximityUUID(), beacon.getMacAddress(), beacon.getMajor(), beacon.getMinor());
beaconManager.startMonitoring(region);
三、问题
1、感应的时候不太灵敏。官方说是空旷地区50米,稳定工作20米,但是如果两个蓝牙模块隔5米,这样去做判断的时候,没有去验证
2、连接后更改设备名称,保存后,再次连接名称没有更改回来,官方demo也是如此,具体没有验证
自己写的测试工程详见附件
测试工程功能:1、可以搜索到附近支持IBeacon的蓝牙模块 2、可以连接 3、读取设备信息 4、感应进入和离开区域
That‘s all。