蓝牙4.0--Android BLE(二)BleLib开源库
简介
首先非常感谢BleLib的作者为我们提供了如此方便的开源库;这个库大大的简化了我们BLE开发的步骤,操作非常简单
BleLib中的关键类
- BleService是单个Ble连接操作的服务类
- GattAttributes类中包含了蓝牙联盟规定的服务和特征的UUID值
- MultipleBleService类是可多个蓝牙设备同时连接的服务类
第一步添加BleLib依赖库
dependencies {compile 'com.junkchen.blelib:blelib:1.2.0'
}
第二步绑定BleLib服务
private ServiceConnection serviceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mIsBind = true;mBleService = ((BleService.LocalBinder) service).getService();//Ble初始化操作if (mBleService.initialize()) {//打开蓝牙if (mBleService.enableBluetooth(true)) {//Ble扫描回调mBleService.setOnLeScanListener(leScanListener);Toast.makeText(getApplicationContext(), "蓝牙已打开", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(getApplicationContext(), "不支持蓝牙", Toast.LENGTH_SHORT).show();}}//绑定服务
private void doBindService() {Intent serviceIntent = new Intent(this, BleService.class);bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}//解绑服务
private void doUnBindService() {if (mIsBind) {unbindService(serviceConnection);mBleService = null;mIsBind = false;}
}
第三步初始化服务
当服务绑定后可进行初始化操作,判断该机是否支持蓝牙,调用如下方法:
//Ble初始化操作
mBleService.initialize();
第四步打开蓝牙
如果发现蓝牙没有打开可以调用下面方法打开蓝牙
//打开或关闭蓝牙
mBleService.enableBluetooth(boolean enable);
第五步扫描ble设备
扫描设备提供了两种方法,boolean参数表示是否开始/停止扫描,long 参数表示扫描的时间;默认时间为10秒:
- mBleService.scanLeDevice(boolean enable)
- mBleService.scanLeDevice(final boolean enable, long scanPeriod)
接受扫描的结果
接受扫描到的结果也有两种方式可供选择
监听器方式
//Ble扫描回调 mBleService.setOnLeScanListener(new BleService.OnLeScanListener() { @Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {//每当扫描到一个Ble设备时就会返回,(扫描结果重复的库中已处理) } });
广播方式
“`Java
private BroadcastReceiver bleReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BleService.ACTION_BLUETOOTH_DEVICE)) {
String tmpDevName = intent.getStringExtra(“name”);
String tmpDevAddress = intent.getStringExtra(“address”);
Log.i(TAG, “name: ” + tmpDevName + “, address: ” + tmpDevAddress);
} else if (intent.getAction().equals(BleService.ACTION_SCAN_FINISHED)) {
//扫描Ble设备停止
}
}
};
第六步连接Ble服务
mBleService.connect(String address);//连接Ble
mBleService.disconnect();//取消连接
接受连接状态的方式也有两种
- 监听器方式
//Ble连接回调
mBleService.setOnConnectListener(new BleService.OnConnectListener() {@Overridepublic void onConnect(BluetoothGatt gatt, int status, int newState) {if (newState == BluetoothProfile.STATE_DISCONNECTED) {KLog.d("Ble连接已断开");} else if (newState == BluetoothProfile.STATE_CONNECTING) {KLog.d("Ble正在连接");} else if (newState == BluetoothProfile.STATE_CONNECTED) {KLog.d("Ble已连接");} else if (newState == BluetoothProfile.STATE_DISCONNECTING) {KLog.d("Ble正在断开连接");}}
});
- 广播方式
private BroadcastReceiver bleReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(BleService.ACTION_GATT_CONNECTED)) {//Ble已连接} else if (intent.getAction().equals(BleService.ACTION_GATT_DISCONNECTED)) {//Ble连接已断开}}
};
第七步发现服务
//Ble服务发现回调
mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {@Overridepublic void onServicesDiscovered(BluetoothGatt gatt, int status) {}
});
第八步:读写Ble特性和接收GATT通知
连接上Ble并获取服务之后就可以对特性进行读写,设置GATT通知:
mBleService.setCharacteristicNotification();//设置通知
mBleService.readCharacteristic();//读取数据
mBleService.writeCharacteristic();//写入数据
设置读物数据和GATT通知的接受监听器
//Ble数据回调
private BleService.OnDataAvailableListener dataAvailableListener = new BleService.OnDataAvailableListener() {@Overridepublic void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {KLog.d();//处理特性读取返回的数据EventBus.getDefault().post(new DataBean(characteristic));}@Overridepublic void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {KLog.d();//处理通知返回的数据EventBus.getDefault().post(new DataBean(characteristic));}@Overridepublic void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {//处理描述返回的数据KLog.d();}
};
总结
常用方法
mBleService.initialize();//Ble初始化操作
mBleService.enableBluetooth(boolean enable);//打开或关闭蓝牙
mBleService.scanLeDevice(boolean enable, long scanPeriod);//启动或停止扫描Ble设备
mBleService.connect(String address);//连接Ble
mBleService.disconnect();//取消连接
mBleService.getSupportedGattServices();//获取服务
mBleService.setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
boolean enabled);//设置通知
mBleService.readCharacteristic(BluetoothGattCharacteristic characteristic);//读取数据
mBleService.writeCharacteristic(BluetoothGattCharacteristic characteristic, byte[] value);//写入数据
项目地址:https://github.com/CoolkeWang/BleLibTest
博客地址:http://blog.csdn.net/q531934288/article/details/51729158
开源库地址:https://github.com/junkchen/BleLib
蓝牙4.0--Android BLE(二)BleLib开源库相关推荐
- 蓝牙4.0(BLE)电子烟方案
电子香烟得到了越来越多的消费者的青睐.它不仅仅能让吸烟者的健康不受到危害,而且还能让他们的吸烟行为不受地点的限制.但是似乎有人认为这些电子香烟的功能还应该更强大点.近日,一种更加智能化的电子香烟问世, ...
- 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )
文章目录 安卓直播推流专栏博客总结 一. x264 简介 二. x264 交叉编译 三. Android Studio 导入函数库 四. 交叉编译版本 五. GitHub 项目地址 安卓直播推流专栏博 ...
- 针对Android平台播放器开源库NiceVieoPlayer倍速的开发
Android平台的视频开源库可谓百花齐放,直接给出比较流行的几大框架github地址:https://github.com/search?l=Java&o=desc&q=ExoPla ...
- android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...
电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...
- android 蓝牙4.0(BLE) 开发
简介 蓝牙发展至今经历了9个版本的更新.1.1.1.2.2.0.2.1.3.0.4.0.4.1.4.2.5.0.那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是 ...
- android ble 蓝牙绑定流程,android BLE蓝牙开发
蓝牙BLE设备是目前比较热门的设备.由于BLE有低功耗等特点,被广泛应用到身边的电子产品上.如智能手表.手环.防丢器等各种产品上.最近研究一下android上的ble应用开发.跟大家分享一下相关的内容 ...
- Android 写自己的开源库,发布到 JitPack
一.准备工作 1 github 账号 2 github 创建Android 项目 3 添加一个新的android library Module 作为需要上传的开源库 二.项目结构 三.完成自己库的编写 ...
- Android下拉刷新开源库对比(转)
安卓下拉刷新开源库对比 作者:desmond1121 目前仅比对github上star数>1500的下拉刷新开源库,在比较完成之后可能会加入其它有代表性的库. Repo Repo Owner S ...
- Android常用的第三方开源库和框架
第三方开源库和组件 一个专注于平滑滚动的Android图像加载和缓存库 https://github.com/bumptech/glide 图片缓存Universal-Image-Loader: ht ...
最新文章
- JavaScript之共享onload
- 06004_Redis的启动、使用和停止
- 在B站学习大名鼎鼎的StatQuest 系列统计和生信分析视频(中文字幕)- 也见证助理教授到创业者的华丽转身...
- python发邮件详解_用Python3发送邮件详解
- 用java画一个网格_用SolidWorks画一个波浪起伏的烟灰缸,包覆是重点
- java电子书大全 下载
- GooFlow修改元素color(背景/字体/连线)
- ae2020英文改中文_AE2020 菜单中英文翻译对照表(小白必备AE菜单字典)
- swf -fla -swf
- echarts,hightcharts直接引用数据,渲染北京城镇街道行政界线地图
- dpp-enrollee配网
- C++中的LPVOID类型
- MyScript基础功能
- easyUI的高级查询
- 科罗拉多州立大学计算机科学,2020年科罗拉多州立大学排名TFE Times美国最佳计算机科学硕士专业排名第81...
- ssm+Vue计算机毕业设计虚拟问诊系统(程序+LW文档)
- 2020 ACL《CoGAN》- Aspect Sentiment Classification with Document-level Sentiment Preference Modeling
- android 家长控制app下载,任天堂家长控制app下载-任天堂家长控制 安卓版v1.0.2-PC6安卓网...
- 莲:什么?朕的大清亡了?
- 利用sql语句删除重复数据