Android中的蓝牙通信

一、蓝牙简介

现有的蓝牙主要分为两类:

  • 经典蓝牙:3.0版本以下的蓝牙,都称为“经典蓝牙”,功耗高、传输数据量大、传输距离只有10米。

  • 低功耗蓝牙:4.0及以上版本的蓝牙就是低功耗蓝牙也叫BLE,低功耗,数据量小,距离50米左右。

Android4.3以上对这两种蓝牙都是支持的,不过经典蓝牙和低功耗蓝牙的API是不一样的,如果用低功耗蓝牙API的方法去连接经典蓝牙设备,是连不上的。

蓝牙小车上用的大部分是经典蓝牙,所以我们这里介绍经典蓝牙API的使用。

二、经典蓝牙通信流程及相关API

经典蓝牙通信的流程是:发现设备->配对/绑定设备->建立连接->数据通信

经典蓝牙通信涉及到的API主要有:

  • BluetoothAdapter主要负责蓝牙的打开、关闭扫描。

  • BluetoothSocket主要负责蓝牙的连接、读写数据。

接下来我们介绍具体的方法:

1.获取BluetoothAdapter对象

使用BluetoothAdapter.getDefaultAdapter()方法即可以获取该对象,

2.打开蓝牙

判断蓝牙是否开启: bluetoothAdapter.isEnabled()

打开蓝牙的方式:

(1)异步自动开启蓝牙,调用bluetoothAdapter的enable方法,这种方法打开蓝牙不会弹出提示,但是蓝牙不会立即处于开启状态

(2)同步提示开启蓝牙,打开一个Intent:BluetoothAdapter.ACTION_REQUEST_ENABLE

3.扫描设备

开始扫描设备的方法:startDiscovery()

取消扫描设备的方法:cancelDiscovery()

扫描是在后台进行的,需要利用广播接收者接收扫描结果

扫描设备过程中,扫描开始、扫描结束、发现设备, 均会有相应的广播发出

4.连接设备

可以通过设备地址连接蓝牙,首先调用getRemoteDevice()方法获取蓝牙设备,然后调用device.createRfcommSocketToServiceRecord()方法获取bluetoothSocket,在连接前需要调用cancelDiscovery()方法取消扫描,最后进行连接调用connect()方法进行连接

5.蓝牙数据收发

收,即读数据:

bytes = bluetoothSocket.getInputStream().read(buffer);

法,即写数据:

bluetoothSocket.getOutputStream().write(buffer);

6.蓝牙的操作权限

在AndroidManifest里面添加权限

首先是使用蓝牙的权限:

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

其次是蓝牙设备管理的权限:

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

三、具体实现

我们采用一个Button弹出蓝牙设置的对话框,再用一个列表列出已绑定的蓝牙设备,如果需要的蓝牙设备不在列表中,则需要扫描设备。如果需要的蓝牙设备已在列表中,则只需要点击需要连接的蓝牙设备即可。点击设备后将进行蓝牙连接,连接成功或失败均会弹出提示。蓝牙连接成功后就可以进行控制指令的收发了。

这里我将蓝牙相关操作放到了一个BluetoothUtils类中,另外蓝牙扫描和已绑定设备用一个Activity进行呈现。在这个Activity中有个广播接收者,用于接收扫描到的新设备和扫描结束的广播,将新扫描到的设备添加到列表中。

需要发送的指令需要和单片机端进行配合,这里需要查看小车控制手册,或者小车的源码,如果小车端收到“ONA”会前进,则安卓端也要发送“ONA”,小车收到后才能前进。

四、完整代码

关注“Android硬开发”,回复“蓝牙小车”

猜你喜欢

转载自blog.csdn.net/Lwjobs/article/details/112999772