现在对于短距离通信,尤其是一些附加设备,采用蓝牙通信是一个很流行的选择,因此,作为一名移动端开发人员,需要掌握蓝牙开发的相关信息。
那么,都有哪些知识需要掌握呢?我们一起来看一下。
一、蓝牙开发的基本组件
在安卓系统中,蓝牙开的基本组件有如下几个:
1、BluetoothAdapter类。这个类代表本地的蓝牙适配器,也是所有蓝牙交互的入口点。利用该类,可以发现其它蓝牙设备,查询已经匹配了的设备,使用已知的MAC地址实例化一个蓝牙设备从而能够与该设备进行通信,以及作为服务器端,建立一个BluetoothServerSocket,来监听来自其它设备的连接。
2、BluetoothDevice类。这个类代表了一个远端的蓝牙设备,使用它可以获取扫描到的蓝牙设备的各类信息,如名称、MAC地址、各类和绑定状态等。
3、BluetoothSocket类。这个类代表了一个蓝牙套接字的接口(类似于TCP),它是应用程序通过输入、输出流与其它蓝牙设备通信的连接点。
4、BluetoothServerSocket类。这个类代表打开服务连接监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务接口。当远端设备发起连接请求,并且已经连接上了的时候,该类会返回一个BluetoothSocket。
5、BluetoothClass类。这个类是一个描述类,描述了一个蓝牙设备的一般特点和能力。他的只读属性集中定义了设备的主、次类和一些相关服务。
二、需要在AndroidManifest.xml里加入什么权限
使用蓝牙设备,需要加入
<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" />
三、如何初始化蓝牙设备并判断蓝牙是否开启
可以通过getDefaultAdapter()来获取蓝牙适配器BluetoothAdapter,当然,如果获取到的值为空,就说明该设备不支持蓝牙。如果成功了,就后用其中的isEnabled()函数来判断蓝牙是否启用。
四、如何查找已匹配的设备
可以使用BluetoothAdapter中的getBondedDevices()来获取匹配的设备集,代码如下
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
五、建立蓝牙连接需要什么
建立蓝牙连接只需要一个MAC地址就够了,扫描到对方设备后,可以获取对方的MAC地址。扫描设备使用startDiscovery()方法,在旧一点的版本中,使用startLeScan()进行扫描,不过这个方法已经被放弃了。
扫描到设备会抛出ACTION_FOUND动作,因此需要注册一个BroadcastReceiver来接受扫描到的信息。而对于每一个扫描设备都会抛出一个ACTION_FOUND动作。
如果想建立两个设备之间的连接,还需要实现客户端和服务器端的代码。一个持有打开的BluetoothServerSocket来监听外来连接,监听到之后返回一个BluetoothSocket给对方用于通信。
六、如何进行数据传输
通信通道建立好了之后,双方都有了各自的BluetoothSocket。然后就可以通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过read(byte[])和write(byte[])来读取和写入数据。
注意一点哦,读取和写入,都是阻塞行为,所以需要新起一个线程。
以上就是安卓开发蓝牙设备的方法哦,大家学会了吗?