蓝牙通信的简要设计与开发

蓝牙API

Android 的蓝牙 API 可提供以下功能:
查找并配对蓝牙设备。
建立 RFCOMM 通道。
通过服务发现(Device Discovery)与其他无线设备进行连接。
与其他设备进行蓝牙数据传输。
管理多个蓝牙连接。

蓝牙通信步骤

1,首先开启蓝牙
2,搜索可用设备
3,创建蓝牙socket,获取输入输出流
4,读取和写入数据
5,断开连接关闭蓝牙

蓝牙客户端Socket

1、创建客户端蓝牙Sokcet
2、创建连接
3、读写数据
4、关闭

蓝牙服务端Socket

1、创建服务端蓝牙Socket
2、绑定端口号(蓝牙忽略)
3、创建监听listen(蓝牙忽略, 蓝牙没有此监听,而是通过whlie(true)死循环来一直监听的)
4、通过accept(),如果有客户端连接,会创建一个新的Socket,体现出并发性,可以同时与多个socket通讯)
5、读写数据
6、关闭

实现蓝牙通信的关键类和接口

android.bluetooth 包中提供所有 Bluetooth API。以下概要列出了创建蓝牙连接所需的类和接口:

BluetoothAdapter
表示本地蓝牙适配器(蓝牙无线装置)。BluetoothAdapter 是所有蓝牙交互的入口点。借助该类,您可以发现其他蓝牙设备、查询已绑定(已配对)设备的列表、使用已知的 MAC 地址实例化 BluetoothDevice,以及通过创建 BluetoothServerSocket 侦听来自其他设备的通信。
BluetoothDevice
表示远程蓝牙设备。借助该类,您可以通过 BluetoothSocket 请求与某个远程设备建立连接,或查询有关该设备的信息,例如设备的名称、地址、类和绑定状态等。
BluetoothSocket
表示蓝牙套接字接口(类似于 TCP Socket)。这是允许应用使用 InputStream 和 OutputStream 与其他蓝牙设备交换数据的连接点。
BluetoothServerSocket
表示用于侦听传入请求的开放服务器套接字(类似于 TCP ServerSocket)。如要连接两台 Android 设备,其中一台设备必须使用此类开放一个服务器套接字。当远程蓝牙设备向此设备发出连接请求时,该设备接受连接,然后返回已连接的 BluetoothSocket。
BluetoothClass
描述蓝牙设备的一般特征和功能。这是一组只读属性,用于定义设备的类和服务。虽然这些信息会提供关于设备类型的有用提示,但该类的属性未必描述设备支持的所有蓝牙配置文件和服务。
BluetoothProfile
表示蓝牙配置文件的接口。蓝牙配置文件是适用于设备间蓝牙通信的无线接口规范。举个例子:免提配置文件。如需了解有关配置文件的详细讨论,请参阅使用配置文件。
BluetoothHeadset
提供蓝牙耳机支持,以便与手机配合使用。这包括蓝牙耳机配置文件和免提 (v1.5) 配置文件。
BluetoothA2dp
定义如何使用蓝牙立体声音频传输配置文件 (A2DP),通过蓝牙连接将高质量音频从一个设备流式传输至另一个设备。
BluetoothHealth
表示用于控制蓝牙服务的健康设备配置文件代理。
BluetoothHealthCallback
用于实现 BluetoothHealth 回调的抽象类。您必须扩展此类并实现回调方法,以接收关于应用注册状态和蓝牙通道状态变化的更新内容。
BluetoothHealthAppConfiguration
表示第三方蓝牙健康应用注册的应用配置,该配置旨在实现与远程蓝牙健康设备的通信。
BluetoothProfile.ServiceListener
当 BluetoothProfile 进程间通信 (IPC) 客户端连接到运行特定配置文件的内部服务或断开该服务连接时,向该客户端发送通知的接口。

Android蓝牙通信

要使用蓝牙功能,需要在 AndroidManifest.xml 中声明相应权限
蓝牙权限有两种,分别为:

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

如果想在应用程序中请求或者建立蓝牙连接并传递数据,必须声明 Bluetooth 权限。若想初始化设备发现功能或者对蓝牙设置进行更改,则必须声明 BLUETOOTH_ADMIN 权限。

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

首先使用 BluetoothAdapter 类的对象来确认设备具有蓝牙功能,然后使用 Intent 开启蓝牙功能。相关代码如下:

BluetoothAdapter mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter(); 
if (mBluetoothAdapter==null) {
   
    //设备不支持蓝牙功能
    return;
}
//设备支持蓝牙功能
if (!mBluetoothAdapter.isEnabled()) {
   
    //用于启动蓝牙功能的 Intent
    Intent enableBtIntent=new Intent (BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult (enableBtIntent, REQUEST_ENABLE_BT);
}

通过 BluetoothAdapter 类对象可以发现其他的蓝牙设备。在启动设备发现服务前,应该首先对配对设备列表进行查询,以确定要连接的无线设备是否已知。配对设备列表中存储了以前配对过的蓝牙设备的基本信息,如设备名称、设备类型、设备的 MAC 地址等。通过设备列表查找设备可以节省大量查找时间。查询设备列表的代码如下

Set<BluetoothDevice> pairedDevices=mBluetoothAdapter.getBondedDevices();
//已配对设备列表存在
if(pairedDevices.size() > 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值