android蓝牙开发之经典蓝牙

本文介绍了Android平台上的经典蓝牙开发,包括扫描设备、查询本地蓝牙适配器、建立RFCOMM通道、连接管理以及数据传输。讲解了如何启用蓝牙、发现设备、连接设备,特别强调了连接作为服务器和客户端的流程,以及数据传输的处理。还提及了蓝牙权限的声明和设备发现的注意事项。
摘要由CSDN通过智能技术生成
                                                 android开发之经典蓝牙

安卓平台包括支持蓝牙网络协议栈,它允许设备与其他蓝牙设备进行无线交换数据。 应用程序框架提供通过安卓蓝牙接口访问蓝牙功能。 这些应用程序的无线连接到其他蓝牙设备,使点对点和多点的无线功能。

使用蓝牙接口,安卓应用程序可以执行以下:
  1. 扫描其他蓝牙设备
  2. 查询本地蓝牙适配器,用于配对蓝牙设备
  3. 建立RFCOMM通道
  4. 通过服务发现连接到其他设备
  5. 向其他设备传送数据
  6. 管理多个连接
本文档介绍了如何使用经典蓝牙。 经典蓝牙是更为正确的选择,更多的电池密集的操作,如流媒体和通信之间的安卓设备。 对于低功耗的蓝牙设备,安卓4.3(原料药18)对蓝牙低能量的支持。 要了解更多,见蓝牙低能量。

基础

本文档介绍了如何使用安卓的蓝牙接口来完成四个主要任务所需的通信使用蓝牙:设置蓝牙,寻找设备,无论是配对或可在本地区,连接设备,设备之间传输数据。

所有的蓝牙API可在android.bluetooth包。这里的类和接口,您将需要创建蓝牙连接的总结:
  1. BluetoothAdapter:表示本地蓝牙适配器(蓝牙收音机)。对于任务是所有蓝牙互动的切入点。利用这一点,你会发现其他的蓝牙设备,查询列表(配对)保税设备,实例化一个蓝牙设备使用一个已知的MAC地址,并创建一个bluetoothserversocket听来自其他设备的通信。
  2. BluetoothDevice:表示远程蓝牙设备。使用此请求与远程设备的连接通过一个BluetoothSocket或查询有关的装置,如名称、地址、类别信息,并结合状态。
  3. BluetoothSocket:代表一个蓝牙套接字接口(类似于TCP套接字)。这是连接点,允许一个应用程序与另一个蓝牙设备通过InputStream和OutputStream交换数据
  4. BluetoothServerSocket:代表一个打开服务器套接字侦听传入的请求(类似于一个TCP ServerSocket)。为了连接2个安卓设备,一个设备必须打开一个与这个类的服务器套接字。当一个远程蓝牙设备进行连接请求的这种装置的bluetoothserversocket将返回一个BluetoothSocket连接时连接被接受
  5. BluetoothClass:描述蓝牙设备的一般特性和功能。这是一组只读的属性,定义设备的主要和次要设备类及其服务。然而,这并不能可靠地描述设备所支持的所有蓝牙配置文件和服务,但对设备类型的提示是有用的
  6. BluetoothProfile:表示蓝牙配置文件的接口。蓝牙配置文件是一种基于蓝牙的设备之间的无线接口规范。一个例子是双手自由配置文件。对于配置文件的更多讨论,请参见使用配置文件
  7. BluetoothHeadset:提供了对蓝牙耳机的支持。这包括蓝牙耳机和免提(V1.5)简介。
  8. BluetoothA2dp:定义如何高质量的音频可以从一个设备传输到另一个蓝牙连接。”A2DP”代表先进的音频分布。
  9. BluetoothHealth:表示控制蓝牙服务的健康设备配置文件代理。
  10. BluetoothHealthCallback:一个抽象类,您使用来实现bluetoothhealth回调。您必须扩展这个类并实现回调方法以接收应用程序注册状态和蓝牙信道状态的变化的更新。
  11. BluetoothHealthAppConfiguration:表示蓝牙健康第三方应用程序注册与远程蓝牙健康设备通信的应用程序配置。
  12. BluetoothProfile.ServiceListener:一个界面,通知bluetoothprofile IPC客户当他们已连接或断开了与服务(即内部服务运行一个特定的配置文件)。
具体流程:
(1)流程图

(2).具体实例

1.蓝牙权限

为了在您的应用程序中使用蓝牙功能,您必须声明蓝牙允许蓝牙。您需要此权限来执行任何蓝牙通信,例如请求连接、接受连接和传输数据。

如果你想让你的应用启动设备发现或操纵蓝牙设置,你也必须申报bluetooth_admin许可。大多数应用程序都需要这个权限,完全可以发现本地蓝牙设备的能力。除非该应用程序是一个“电源管理器”,在用户请求上修改蓝牙设置,否则无法使用该权限授予的其他能力。注意:如果你使用bluetooth_admin许可,那么你也必须有蓝牙许可。

在应用程序清单文件中声明蓝牙权限。例如:

2.设置蓝牙:

在您的应用程序可以通过蓝牙进行通信之前,您需要验证设备上是否有蓝牙支持,如果是这样,确保它被启用。

如果不支持蓝牙,那么你应该优雅地禁用蓝牙功能。如果支持蓝牙,但禁用了,那么你可以请求用户启用蓝牙而不留你的应用程序。这个设置是在两个步骤来完成,使用蓝牙适配器。

     2.1.获得蓝牙适配器

蓝牙适配器是任何和所有蓝牙活性所必需的。要获得蓝牙适配器就要调用静态方法getdefaultadapter()。这将返回一个BluetoothAdapter表示设备的蓝牙适配器(蓝牙无线电)。整个系统有一个蓝牙适配器,您的应用程序可以使用这个对象进行交互。如果getdefaultadapter()返回null,则该设备不支持蓝牙和你的故事在这里结束。例如:

    2.2启用蓝牙

接下来,您需要确保启用蓝牙。电话isenabled()检查蓝牙目前是否启用。如果该方法返回假,则禁用蓝牙。要求蓝牙启用,电话startactivityforresult()与action_request_enable动作意图。这将发出一个请求,使蓝牙通过系统设置(不停止您的应用程序)。例如:

BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。 特点 一、支持经典蓝牙和BLE蓝牙混合扫描,支持自定义扫描策略  作为智能家居平台,接入的设备包括经典蓝牙和BLE,因此扫描设备时需要两者混合进行,而设备扫描场景不同,扫描策略也会不一样,因此需要支持扫描策略可配置。 二、充分解决了Android中BLE兼容性和稳定性问题  Android系统对蓝牙4.0支持得并不完善,有许多bug, BluetoothKit很好地解决了其中大部分已知的问题。  三、简单易用,接口简洁明了  BluetoothKit采用异步串行化策略处理所有设备操作,并支持任务超时及出错重试。  技术 一、实现了一个完整的跨进程异步任务队列,支持任务超时、出错重试及防御队列溢出 二、拦截并Hook系统层蓝牙Binder,实现对所有蓝牙设备通信的监控,当同时连接设备数过多时会自动断掉活跃度最低的设备 三、整个框架封装在一个service中,可灵活指定service所在进程。通过client与service通信,client可源于多个不同进程,因此适用于多进程架构的app 四、屏蔽了接口异步回调可能持有调用端Activity引用导致的内存泄露 五、利用动态代理自动将所有操作封闭在工作线程,所以整个框架无锁 使用 // 首先,需要按如下方式初始化BluetoothClient: BluetoothClient mClient = BluetoothClient.getInstance(context); // 扫描设备:支持经典蓝牙和BLE设备混合扫描,可自由定制扫描策略如下: SearchRequest request = new SearchRequest.Builder() .searchBluetoothLeDevice(3000, 3) .searchBluetoothClassicDevice(5000) .searchBluetoothLeDevice(2000) .build(); mClient.search(request, new SearchResponse() { @Override public void onSearchStarted() { } @Override public void onDeviceFounded(SearchResult device) { } @Override public void onSearchStopped() { } @Override public void onSearchCanceled() { } }); // 停止蓝牙扫描 mClient.stopSearch(); // BLE设备连接 mClient.connect(MAC, new BleConnectResponse() { @Override public void onResponse(int code, Bundle data) { if (code == REQUEST_SUCCESS) { } } }); // BLE设备断开连接 mClient.disconnect(MAC); // 读取BLE设备 mClient.read(MAC, serviceUUID, characterUUID, new BleReadResponse() { @Override public void onResponse(int code, byte[] data) { if (code == REQUEST_SUCCESS) { } } }); // 写BLE设备 mClient.write(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() { @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } }); // 打开设备通知 mClient.notify(MAC, serviceUUID, characterUUID, new BleNotifyResponse() { @Override public void onNotify(UUID service, UUID character, byte[] value) { } @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } }); // 关闭设备通知 mClient.unnotify(MAC, serviceUUID, characterUUID, new BleUnnotifyResponse() { @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } }); // 读取rssi mClient.readRssi(MAC, new BleReadRssiResponse() { @Override public void onResponse(int code, Integer rssi) { if (code == REQUEST_SUCCESS) { } } }); 标签:BluetoothKit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值