Android蓝牙库FastBle的基础入门使用

前言

最近在做物联网课设,过程中需要用到Android的蓝牙API,奈何原生的蓝牙API使用有点麻烦。于是上网搜索看有没有好用的Android蓝牙库,然后发现了这个宝贝,给大家分享一下。

FastBle VS 原生Android蓝牙API

原生Android的蓝牙API使用有点麻烦,要先获取设备的蓝牙适配器,接着注册广播来接受蓝牙设备信息,用完了还需要将广播给注销,相对来说有点麻烦。

不好封装,可以说是原生Android最让人痛苦的地方,这是因为原生Android的代码不是很独立,与Activity、广播等相杂糅。市面上的蓝牙库也是少之又少,先看了看BleLib,感觉还是换汤不换药,用起来一点也不简洁。

但是FastLib封装的就很技巧,基本上能把一个操作的粒度控制在一行内,另外,代码也无需与线程、通知之类的打交道,库中已经帮我们把这些复杂的东西都做完了。

FastBle的Github项目地址在这,大家可以看看:[FastBle - GitHub](https://github.com/Jasonchenlijian/FastBle  (本地下载)

它的文档也相对比较完整,大家可以查看官方文档来使用它:FastBle - Document

FastBle的使用

0x00 申明权限

只要使用到了蓝牙,申明权限是必不可少的,FastBle需要的权限如下:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

这里要注意一点,如果Android版本高于6.0,用户还需要打开位置信息(不光要位置权限,还需要打开位置信息)才能通过蓝牙进行扫描。

0x01 初始化与全局配置

初始化需要在库中任何函数被调用前执行,由于库使用的是单例模式,只需要初始化一次,在哪里都能使用,建议在onCreate里执行初始化代码:

BleManager.getInstance().init(getApplication());

全局配置可以紧跟初始化之后执行,当然如果不进行配置也没有任何关系,每一个选项都有默认值:

BleManager.getInstance()
 .enableLog(true)
 .setReConnectCount(1, 5000)
 .setSplitWriteNum(20)
 .setConnectOverTime(10000)
 .setOperateTimeout(5000);

每一项的详细信息你都能在官方文档中找到说明

0x02 打开蓝牙

使用FastBle中的BleManager类有很多种方式来打开蓝牙,这里推荐使用下面这种方式,这种方式会使线程被阻塞,如果用户不选择是否打开蓝牙,线程将会暂停执行:

BleManager.getInstance().enableBluetooth();

0x03 扫描设备

打开蓝牙之后即可扫描设备,在正式扫描之前,可以自定义扫描规则,像这样:

BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
 .setServiceUuids(serviceUuids) // 只扫描指定的服务的设备,可选
 .setDeviceName(true, names)  // 只扫描指定广播名的设备,可选
 .setDeviceMac(mac)   // 只扫描指定mac的设备,可选
 .setAutoConnect(isAutoConnect) // 连接时的autoConnect参数,可选,默认false
 .setScanTimeOut(10000)  // 扫描超时时间,可选,默认10秒;小于等于0表示不限制扫描时间
 .build();

BleManager.getInstance().initScanRule(scanRuleConfig);

在设置规则后,即可开始扫描,像这样

BleManager.getInstance().scan(new BleScanCallBack() {
 @Override
 public void onScanStarted(boolean success) {
 // 开始扫描的回调
 }

 @Override
 public void onScanning(BleDevice bleDevice) {
 // 扫描到一个之前没有扫到过的设备的回调
 }

 @Override
 public void onScanFinished(List<BleDevice> scanResultList) {
 // 扫描完成的回调,列表里将不会有重复的设备
 }
});

这几个回调都是安全的,将会自动返回主线程,所以可以放心使用。

当然,在任何地方,任何时候,你都可以直接使用取消扫描这个函数来停止扫描:

BleManager.getInstance().cancelScan();

0x04 连接设备

在扫描之后,你已经获取到了一个或多个BleDevice对象,你可以直接使用这些对象向目标设备发起连接,像这样:

BleManager.getInstance().connect(bleDevice, new BleGattCallback() {
 @Override
 public void onStartConnect() {
 // 开始连接
 }

 @Override
 public void onConnectFail(BleDevice bleDevice, BleException exception) {
  // 连接失败
 }

 @Override
 public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
  // 连接成功,BleDevice即为所连接的BLE设备
 }

 @Override
 public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
  // 连接中断,isActiveDisConnected表示是否是主动调用了断开连接方法
 }
});

当然,在官方文档中还有很多详细的说明,这里只是简单介绍了一下FastBle的基本使用,了解详情还请看官方文档。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 详解Android——蓝牙技术 带你实现终端间数据传输

    蓝牙技术在智能硬件方面有很多用武之地,今天我就为大家分享一下蓝牙在Android系统下的使用方法技巧,并实现一下两个终端间数据的传输. 蓝牙(Bluetooth)是一种短距离的无线通信技术标准,蓝牙协议分为4层,即核心协议层.电缆替代协议层.电话控制协议层和采纳的其它协议层. 这4种协议中最重要的是核心协议.蓝牙的核心协议包括基带.链路管理.逻辑链路控制和适应协议四部分.其中链路管理(LMP)负责蓝牙组件间连接的建立.逻辑链路控制与适应协议(L2CAP)位于基带协议层上,属于数据链路层,是一个为

  • Android系统中的蓝牙连接程序编写实例教程

    Bluetooth结构 1.JAVA层 frameworks/base/core/java/android/bluetooth/ 包含了bluetooth的JAVA类. 2.JNI层 frameworks/base/core/jni/android_bluetooth_开头的文件 定义了bluez通过JNI到上层的接口. frameworks/base/core/jni/android_server_bluetoothservice.cpp 调用硬件适配层的接口system/bluetooth/

  • Android手机通过蓝牙连接佳博打印机的实例代码

    所使用的打印机为佳博打印机,支持蓝牙.wifi.usb我所使用的是通过蓝牙来连接. 在网上找到一个佳博官方针对安卓开发的App源码,但是各种的跳转,没有看太懂,所以又去问度娘,找到了一个不错的文章 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 // 管理蓝牙设备的权限 <uses-permissionandroid:name="

  • 分享Android 蓝牙4.0(ble)开发的解决方案

    最近,随着智能穿戴式设备.智能医疗以及智能家居的普及,蓝牙开发在移动开中显得非常的重要.由于公司需要,研究了一下,蓝牙4.0在Android中的应用. 以下是我的一些总结. 1.先介绍一下关于蓝牙4.0中的一些名词吧:    (1).GATT(Gneric Attibute  Profile) 通过ble连接,读写属性类小数据Profile通用的规范.现在所有的ble应用Profile  都是基于GATT (2).ATT(Attribute Protocal) GATT是基于ATT Potoca

  • Android单片机与蓝牙模块通信实例代码

    啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通过参考网上资料,问题顺利搞定,下面小编把具体实现思路分享给大家,供大家参考. 1.Android蓝牙编程 蓝牙3.0及以下版本编程需要使用UUID,UUID是通用唯一识别码(Universally Unique Identifier),这是一个软件构建的标准,也是被开源基金会组织应用在分布式计算环境领域的一部分.在蓝牙3.0及下一版本中,UUID被用于唯一标识一个服务,比如文件传输服务,串口服务.打印机服务等,如下: #蓝牙串

  • Android蓝牙开发深入解析

    1. 使用蓝牙的响应权限 复制代码 代码如下: <uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 2. 配置本机蓝牙模块 在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter 复制代码 代码如下: Bluetoot

  • Android Bluetooth蓝牙技术使用流程详解

    在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情. 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了.例如: BluetoothAdapter mBluetoothAdapter = Blueto

  • Android适配安卓6.0蓝牙通讯实现过程

    事先说明: 安卓蓝牙需要定位权限申请,在安卓6.0需要用户手动确认权限后才能使用,各位可以自行查询资料实现,如果嫌麻烦,可以用第三方Bmob集成好的工具类进行实现,详细可以看http://blog.csdn.net/qq_30379689/article/details/52223244 蓝牙连接过程: 1.查询用户是否开启蓝牙. 2.搜索附近的可用的蓝牙. 3.进行蓝牙配对. 4.进行蓝牙连接. 5.获取输入流和输出流. 6.发送消息. 晒上我自己画的美图: 实验效果图: 实现需要的权限:由于

  • Android蓝牙通信聊天实现发送和接受功能

    很不错的蓝牙通信demo实现发送和接受功能,就用了两个类就实现了,具体内容如下 说下思路把 主要有两个类 主界面类 和 蓝牙聊天服务类 . 首先创建线程 实际上就是创建BluetoothChatService() (蓝牙聊天服务类) 这个时候把handler 传过去 这样就可以操作UI 界面了,在线程中不断轮询读取蓝牙消息,当主界面点击发送按钮时 调用BluetoothChatService 的发送方法write 方法,这里的write 方法 使用了handler 发送消息,在主界面显示,另一个

  • android实现蓝牙文件发送的实例代码,支持多种机型

    最近项目上需要实现蓝牙传输apk的一个功能,能够搜索周围的蓝牙手机并分享文件.从需求上讲android手机自带的蓝牙传输模块就可以满足需要了,实现也很简单.不过让人头疼的是,虽然说一般的主流机型都配置有蓝牙模块,但是android机型碎片化太严重,不同android版本手机蓝牙功能也不一样.4.0.3以下版本和以上版本使用的蓝牙包是不同的,分别是"com.android.bluetooth"和"com.mediatek.bluetooth".还有一些厂商对蓝牙模块进

随机推荐