转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410

使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释


BleLib是Android低功耗蓝牙4.0及以上开发的辅助库。一行代码解决Ble初始化、扫描、连接、特性读写、设置通知等操作。

BleLib支持单个Ble连接或多个Ble设备同一时候连接。

BleLib中的关键类:

  • BleService是单个Ble连接操作的服务类
  • GattAttributes类中包括了蓝牙联盟规定的服务和特征的UUID值
  • MultipleBleService类是可多个蓝牙设备同一时候连接的服务类

用法

第一步:加入BleLib库依赖

因此。在你项目Module中的build.gradle文件里加入库依赖就可以。例如以下:

dependencies {
compile 'com.junkchen.blelib:blelib:1.0.4'
}

仅仅此一句就可以使用BleLib库,方便吧,要的就是这效果。

使用Android Studio时依照例如以下方式加入依赖比較好,获取的是最新的版本号,结果和上面是一样的,进入模块的库依赖设置。搜索blelib就可以获取:


第二步:绑定BleLib服务

BleLib库中的Ble服务类继承了Service,因此建议绑定服务进行使用。

(假设项目中须要同一时候连接多了Ble设备进行控制请绑定MultipleBleService)

private BleService mBleService;
private boolean mIsBind;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mBleService = ((BleService.LocalBinder) service).getService();
if (mBleService.initialize()) {
if (mBleService.enableBluetooth(true)) {
mBleService.scanLeDevice(true);
Toast.makeText(BleScanActivity.this, "Bluetooth was opened", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(BleScanActivity.this, "not support Bluetooth", Toast.LENGTH_SHORT).show();
}
} @Override
public void onServiceDisconnected(ComponentName name) {
mBleService = null;
mIsBind = false;
}
}; 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;
}
}

第三步:初始化操作

当服务绑定后可进行初始化操作,推断该机是否支持蓝牙。调用例如以下方法:

mBleService.initialize();//Ble初始化操作  

该方法会返回一个boolean值。返回true表示初始化成功。支持蓝牙;返回false表示初始化操作失败。则兴许的全部操作都不能进行。


第四步:打开蓝牙

当初始化操作成功后就能够打开蓝牙了,调用例如以下方法:

mBleService.enableBluetooth(boolean enable);//打开或关闭蓝牙 

该方法须要传入一个boolean类型的參数。true表示打开蓝牙,false表示关闭蓝牙;并返回boolean參数,返回true表示蓝牙打开,否则关闭。


第五步:扫描Ble设备

当蓝牙打开后能够进行Ble设备的扫描了,调用例如以下方法:

mBleService.scanLeDevice(boolean enable, long scanPeriod);//启动或停止扫描Ble设备  

调用该方法须要传入一个boolean參数,true表示開始进行扫描Ble设备,false表示停止扫描,默认扫描10秒钟后停止,假设想要自己设定扫描的时间,能够输入一个long型參数,表示时间单位为毫秒,如3000表示3秒后停止扫描,扫描结束是会发出广播。

扫描的结果能够从扫描监听或者广播接收器两种方式获取,设置方法例如以下:

监听方式接收扫描到的Ble设备

//Ble扫描回调
mBleService.setOnLeScanListener(new BleService.OnLeScanListener() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
//每当扫描到一个Ble设备时就会返回,(扫描结果反复的库中已处理)
}
});

注意:设置监听一定要等到BleService服务绑定之后才进行,否则会造成空指针异常)

广播接收扫描到的Ble设备

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服务

当扫描到Ble设备后就能够进行连接操作了。调用例如以下方法:

mBleService.connect(String address);//连接Ble
mBleService.disconnect();//取消连接

连接须要传入要连接的Ble设备的地址。

连接状态能够从连接监听或者广播接收器两种方式获取。设置方法例如以下:

监听获取Ble连接状态

//Ble连接回调
mBleService.setOnConnectListener(new BleService.OnConnectListener() {
@Override
public void onConnect(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_DISCONNECTED) {
//Ble连接已断开
} else if (newState == BluetoothProfile.STATE_CONNECTING) {
//Ble正在连接
} else if (newState == BluetoothProfile.STATE_CONNECTED) {
//Ble已连接
} else if (newState == BluetoothProfile.STATE_DISCONNECTING) {
//Ble正在断开连接
}
}
});

广播接收Ble连接状态

private BroadcastReceiver bleReceiver = new BroadcastReceiver() {
@Override
public 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后会进行服务的获取。假设服务和特性不能发现,那么就不能进行特性的读写和设置GATT通知。

服务发现监听设置例如以下:

//Ble服务发现回调
mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) { }
});

第七步:读写Ble特性和接收GATT通知

连接上Ble并获取服务之后就能够对特性进行读写,设置GATT通知。操作例如以下:

mBleService.setCharacteristicNotification();//设置通知
mBleService.readCharacteristic();//读取数据
mBleService.writeCharacteristic();//写入数据

特性读取的数据和GATT通知接收数据设置OnDataAvailableListener监听获取。设置例如以下:

//Ble数据回调
mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//处理特性读取返回的数据
} @Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
//处理通知返回的数据
}
});

总结

最后小小总结下使用BleLib库进行Android低功耗蓝牙Ble的开发步骤:

  1. 加入BleLib库依赖
  2. 绑定BleLib服务
  3. 初始化操作
  4. 打开蓝牙
  5. 扫描Ble设备
  6. 连接Ble服务
  7. 读写Ble特性和接收GATT通知

Author

2016/3/16 21:49:15

使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释的更多相关文章

  1. Android低功耗蓝牙(BLE)开发的一点感受

    最近一段时间,因为产品的需要我做了一个基于低功耗蓝牙设备的Android应用,其中碰到了一些困难,使我深深体会到Android开发的难处:不同品牌,不同型号和不同版本之间的差异使得Android应用适 ...

  2. Android 低功耗蓝牙BLE 开发注意事项

    基本概念和问题 1.蓝牙设计范式? 当手机通过扫描低功耗蓝牙设备并连接上后,手机与蓝牙设备构成了客户端-服务端架构.手机通过连接蓝牙设备,可以读取蓝牙设备上的信息.手机就是客户端,蓝牙设备是服务端. ...

  3. Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

    原文:Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅 在前几期中总结分享了Android的前世今生.Android 系统架构和应用组件那些事.带你一起来聊一聊Android开发 ...

  4. 5分钟搞定android混淆(转)

    转自:https://www.jianshu.com/p/f3455ecaa56e 前言 混淆是上线前挺重要的一个环节.android使用的ProGuard,可以起到压缩,混淆,预检,优化的作用.但是 ...

  5. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

  6. 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )

    变量:  存储数据的容器     1.声明        var   2.作用域       全局变量. 局部变量. 闭包(相对的全局变量):   3.类型         a.基本类型(undefi ...

  7. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定

    Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...

  8. 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)

    微服务体系,有效解决项目庞大.互相依赖的问题.目前SpringCloud体系有强大的一整套针对微服务的解决方案.本文中,重点对微服务体系中的服务发现注册中心进行详细说明.本篇中的注册中心,采用Netf ...

  9. 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心

    在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...

随机推荐

  1. Ubuntu下,清屏等终端常用命令

    转自:http://blog.csdn.net/gaojinshan/article/details/9314435 # ctrl + l - 清屏 . cLear# ctrl + c - 终止命令. ...

  2. StatefulSet在ZooKeeper和Kafka的实践

    K8s的版本是1.7.6 采用nfs的nas存储模式 NFS的问题 建立zk集群的时候总是发现myid绑定一个id,先describe pod确认每个绑定不同的pvc,然后就确认是pv创建的问题,pv ...

  3. julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域

    编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...

  4. requests访问https网站

    如果报证书校验失败的问题,可以去除证书校验1 import requests requests.get('https://www.zhihu.com/',verify=False)

  5. jquery ajax 不执行赋值,return没有返回值的解决方法

    大家先看一段简单的jquery ajax 返回值的js 复制代码 代码如下: function getReturnAjax{ $.ajax({ type:"POST", url:& ...

  6. unity linear space时 photoshop blend的正确设置

    gamma correction的dcc设置 ps在线性空间下工作 blend的时候颜色设置 勾选用灰度系数混合rgb 1.0 这样就是在线性空间下工作了 这样素材在数学上是正确的 r8g8b8a8格 ...

  7. 理解JS里的稀疏数组与密集数组

    一般来说,JavaScript中的数组是稀疏的. 什么是稀疏呢?稀疏也就是说,数组中的元素之间可以有空隙,因为一个数组其实就是一个键值映射.本文解释了如何创建稀疏数组和不稀疏的数组. 1.稀疏数组 创 ...

  8. Hadoop 伪分布式上安装 Hive

    下载地址:点此链接(P.S.下载带bin的安装包) 下载hive后放到虚拟机文件夹内,打开: -bin.tar.gz -C /home/software/ 修改并保存环境配置: gedit /etc/ ...

  9. Windows编译OpenSSL

    安装说明參考openssl源代码目录下INSTALL.W32 step1 环境搭建 安装perl,Visual Studio 2008 下载Openssl最新版源代码.我下的版本号为OpenSSL-1 ...

  10. .Net Framework 之 框架图

    .Net Framework框架图,如下图:  它表明了这么一种编写软件的方式或者说表明了.Net平台下开发软件的思想和规范. .Net Framework框架实际只包含两部分: 1.公共语言运行时( ...