简介

  首先非常感谢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开源库相关推荐

  1. 蓝牙4.0(BLE)电子烟方案

    电子香烟得到了越来越多的消费者的青睐.它不仅仅能让吸烟者的健康不受到危害,而且还能让他们的吸烟行为不受地点的限制.但是似乎有人认为这些电子香烟的功能还应该更强大点.近日,一种更加智能化的电子香烟问世, ...

  2. 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )

    文章目录 安卓直播推流专栏博客总结 一. x264 简介 二. x264 交叉编译 三. Android Studio 导入函数库 四. 交叉编译版本 五. GitHub 项目地址 安卓直播推流专栏博 ...

  3. 针对Android平台播放器开源库NiceVieoPlayer倍速的开发

    Android平台的视频开源库可谓百花齐放,直接给出比较流行的几大框架github地址:https://github.com/search?l=Java&o=desc&q=ExoPla ...

  4. android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...

    电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...

  5. 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开始的蓝牙我们称之为低功耗蓝牙也就是 ...

  6. android ble 蓝牙绑定流程,android BLE蓝牙开发

    蓝牙BLE设备是目前比较热门的设备.由于BLE有低功耗等特点,被广泛应用到身边的电子产品上.如智能手表.手环.防丢器等各种产品上.最近研究一下android上的ble应用开发.跟大家分享一下相关的内容 ...

  7. Android 写自己的开源库,发布到 JitPack

    一.准备工作 1 github 账号 2 github 创建Android 项目 3 添加一个新的android library Module 作为需要上传的开源库 二.项目结构 三.完成自己库的编写 ...

  8. Android下拉刷新开源库对比(转)

    安卓下拉刷新开源库对比 作者:desmond1121 目前仅比对github上star数>1500的下拉刷新开源库,在比较完成之后可能会加入其它有代表性的库. Repo Repo Owner S ...

  9. Android常用的第三方开源库和框架

    第三方开源库和组件 一个专注于平滑滚动的Android图像加载和缓存库 https://github.com/bumptech/glide 图片缓存Universal-Image-Loader: ht ...

最新文章

  1. JavaScript之共享onload
  2. 06004_Redis的启动、使用和停止
  3. 在B站学习大名鼎鼎的StatQuest 系列统计和生信分析视频(中文字幕)- 也见证助理教授到创业者的华丽转身...
  4. python发邮件详解_用Python3发送邮件详解
  5. 用java画一个网格_用SolidWorks画一个波浪起伏的烟灰缸,包覆是重点
  6. java电子书大全 下载
  7. GooFlow修改元素color(背景/字体/连线)
  8. ae2020英文改中文_AE2020 菜单中英文翻译对照表(小白必备AE菜单字典)
  9. swf -fla -swf
  10. echarts,hightcharts直接引用数据,渲染北京城镇街道行政界线地图
  11. dpp-enrollee配网
  12. C++中的LPVOID类型
  13. MyScript基础功能
  14. easyUI的高级查询
  15. 科罗拉多州立大学计算机科学,2020年科罗拉多州立大学排名TFE Times美国最佳计算机科学硕士专业排名第81...
  16. ssm+Vue计算机毕业设计虚拟问诊系统(程序+LW文档)
  17. 2020 ACL《CoGAN》- Aspect Sentiment Classification with Document-level Sentiment Preference Modeling
  18. android 家长控制app下载,任天堂家长控制app下载-任天堂家长控制 安卓版v1.0.2-PC6安卓网...
  19. 莲:什么?朕的大清亡了?
  20. 利用sql语句删除重复数据

热门文章

  1. java applet配置_最简单的Java Applet程序
  2. TrafficMonitor安装报错
  3. 使用 JavaScript 获取当前 URL?
  4. 【ArcGIS微课1000例】0055:根据图层创建自定义图例符号案例教程
  5. mysql连接数据库的三种方法(连接池,jdbc,Hibernate)
  6. 微信小程序上传图片到阿里云OSS
  7. css引入矢量图标_iconfont css使用矢量图标
  8. 服务器支持gd库,虚拟主机是否支持gd库
  9. react-grid-layout 使用说明
  10. fastdfs工作原理