Android蓝牙BLE开发(二)——对BLE设备的扫描连接以及读写数据

前言

任何例子都不如官方Demo来得实在。安装官方Demo时,如果发现搜索不到设备,需要到手机设置界面给官方Demo开启定位权限,因为官方Demo没有动态获取权限,也可以自己在官方Demo上添加几行代码,实现动态获取定位权限。如何获取定位权限可以参考Android高效处理权限——EasyPermissions框架的使用

官方文档
官方Demo
本文代码下载地址:https://github.com/MattLjp/ble/tree/master

基础介绍

在BLE开发当中各种主要类和其作用:

BluetoothDeivce:蓝牙设备,代表一个具体的蓝牙外设。
BluetoothAdapter:蓝牙适配器,每一台支持蓝牙功能的手机都有一个蓝牙适配器,一般来说,只有一个。
BluetoothManager:蓝牙管理器,主要用于获取蓝牙适配器和管理所有和蓝牙相关的东西。
BluetoothGatt:通用属性协议, 定义了BLE通讯的基本规则,就是通过把数据包装成服务和特征的约定过程。
BluetoothGattCallback:一个回调类,非常重要而且会频繁使用,用于回调GATT通信的各种状态和结果,后面会详细解释。
BluetoothGattCharacteristic:特征,里面包含了一组或多组数据,是GATT通信中的最小数据单元。
BluetoothGattService:服务,描述了一个BLE设备的一项基本功能,由零或多个特征组构成。
BluetoothGattDescriptor:特征描述符,对特征的额外描述,包括但不仅限于特征的单位,属性等。
BluetoothLeScanner:蓝牙适配器里面的扫描器,用于扫描BLE外设。

Android 蓝牙开发示例

第一步:声明所需要的权限

<!--使用蓝牙所需要的权限-->
<uses-permission android:name="android.permission.BLUETOOTH"/> 
<!--使用扫描和设置蓝牙的权限(申明这一个权限必须申明上面一个权限)-->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

在Android5.0之前,是默认申请GPS硬件功能的。而在Android 5.0 之后,需要在manifest 中申明GPS硬件模块功能的使用。

<!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
<uses-feature android:name="android.hardware.location.gps" />

在 Android 6.0 及以上,还需要打开位置权限。如果应用没有位置权限,蓝牙扫描功能不能使用(其它蓝牙操作例如连接蓝牙设备和写入数据不受影响)。

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

第二步:连接蓝牙前的初始化工作

在建立蓝牙连接之前,需要确认设备支持 BLE。如果支持,再确认蓝牙是否开启。如果蓝牙没有开启,可以使用 BLuetoothAdapter 类来开启蓝牙。

1.判断是否支持蓝牙,并获取 BluetoothAdapter

    /**
     * 判断是否支持蓝牙
     */
    private boolean checkBleDevice() {
   
        //首先获取BluetoothManager
        BluetoothManager bluetoothManager =
                (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        //获取BluetoothAdapter
        if (bluetoothManager != null) {
   
            BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
            if (mBluetoothAdapter != null) {
   
                mBleAdapter = mBluetoothAdapter;
                return true;
            } else {
   
                return false;
            }
        } else {
   
            return false;
        }
    }

2.如果检测到蓝牙没有开启,尝试开启蓝牙

if (!mBleAdapter.isEnabled()) {
   
	//打开蓝牙
	Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
	startActivityForResult(intent, OPEN_BT_REQUESTCODE);
	}

第三步:扫描蓝牙设备

外围设备开启蓝牙后,会广播出许多的关于该设备的数据信息,例如 mac 地址,uuid 等等。通过这些数据我们可以筛选出需要的设备。

开启蓝牙扫描

public void startScan(final ScanCallback callback)

停止蓝牙扫描

 public void stopScan(ScanCallback callback)

通过调用 stopScan可以停止正在进行的蓝牙扫描。这里需要注意的是,传入的回调必须是开启蓝牙扫描时传入的回调,否则蓝牙扫描不会停止。

设置回调函数

ScanCallback callback = new ScanCallback() {
   
	@Override
	public void onScanResult(int callbackType, ScanResult result) {
   
		super.onScanResult(callbackType, result);
		//对结果处理
		BluetoothDevice bluetoothDevice = result.getDevice();
		int rssi = result.getRssi(
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值