Android 蓝牙各版本差异

时间:2024-11-04 07:23:31

文章目录

  • 引言
  • 一、Android 蓝牙版本演进
  • 源码改动
    • Android 4.0 - 引入 BLE
    • Android 4.1 - 设备发现优化
    • Android 4.3 - 新增 BLE 扫描功能
    • Android 4.4 - HID API 引入
    • Android 5.0 - A2DP API 增强
    • Android 6.0 - 动态权限管理
    • Android 7.0 - 多设备管理
    • Android 8.0 - 支持蓝牙 5.0
    • Android 9.0 - 用户交互与设置跳转
    • Android 10 - 强化蓝牙权限控制
    • Android 11 - BLE Audio 支持
    • Android 12 - Bluetooth API 重构
    • Android 13 - LC3 编解码器支持
  • 总结


引言

蓝牙技术在 Android 系统中扮演着重要的角色,随着每个版本的更新,Android 对蓝牙功能的支持不断增强。本文将详细介绍 Android 各个版本之间在蓝牙控制方面的主要差异,特别关注 Android 4.0 及之后版本中的重要改动。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Android 蓝牙版本演进

Android 版本 程序控制蓝牙的主要改动
Android 4.0 (Ice Cream Sandwich) 引入 BLE 相关 API,如 BluetoothGatt 和 BluetoothGattCallback,使开发者能够控制 BLE 设备的连接和数据传输。
Android 4.1 (Jelly Bean) 优化设备发现 API,改善 BluetoothAdapter 的操作方式,增加回调机制,使设备发现更高效。
Android 4.3 (Jelly Bean) 新增 BluetoothLeScanner 类,提供更高级的 BLE 扫描功能,开发者可以控制扫描的参数和过滤条件。
Android 4.4 (KitKat) 引入 HID API,简化对 HID 设备(如键盘、鼠标)的管理。
Android 5.0 (Lollipop) 增强 A2DP API,支持 aptX 编解码器,允许开发者选择更高质量的音频编码。
Android 6.0 (Marshmallow) 引入蓝牙权限模型,应用需动态申请蓝牙权限,提升用户隐私保护。
Android 7.0 (Nougat) 允许使用 BluetoothProfile API 获取和管理多个蓝牙设备的连接状态,简化多设备管理。
Android 8.0 (Oreo) 新增对蓝牙 5.0 特性的支持,开发者可以利用更快的传输速率和更远的连接距离。
Android 9.0 (Pie) 加强蓝牙权限管理,若应用需要权限或未开启蓝牙,将引导用户跳转到蓝牙设置界面。
Android 10 继续强化蓝牙权限控制,支持更清晰的蓝牙设置跳转。
Android 11 引入 BLE Audio 支持,通过新 API 控制音频流传输方式和格式。
Android 12 对 Bluetooth API 进行重构,提供更简洁的接口和更高效的设备管理方式。
Android 13 新增 LC3 编解码器支持,开发者可通过相关 API 进行音频编码设置。

源码改动

Android 4.0 - 引入 BLE

在 Android 4.0 版本中,新增了 BLE(Bluetooth Low Energy)相关的类和方法,比如 BluetoothGatt 和 BluetoothGattCallback。这些类允许开发者连接 BLE 设备,并通过 GATT(Generic Attribute Profile)与设备进行数据交互。

public class BluetoothGatt {
    public void connect() { /* 连接到 GATT 服务器 */ }
    public void readCharacteristic(BluetoothGattCharacteristic characteristic) { /* 读取特征值 */ }
}

Android 4.1 - 设备发现优化

Android 4.1 对设备发现 API 进行了优化,改善了 BluetoothAdapter 的操作方式,增加了回调机制以提高设备发现的效率。

bluetoothAdapter.startDiscovery(); // 开始发现设备

Android 4.3 - 新增 BLE 扫描功能

在 Android 4.3 中,新增了 BluetoothLeScanner 类,提供了更高级的 BLE 扫描功能,允许开发者自定义扫描参数。

BluetoothLeScanner leScanner = bluetoothAdapter.getBluetoothLeScanner();
ScanSettings settings = new ScanSettings.Builder().build();
leScanner.startScan(null, settings, scanCallback);

Android 4.4 - HID API 引入

Android 4.4 中引入了 HID API,简化了对 HID 设备的管理,提供了对键盘和鼠标等设备的支持。

BluetoothHidDevice hidDevice = BluetoothHidDevice.create(hidManager, callback);

Android 5.0 - A2DP API 增强

Android 5.0 增强了 A2DP API,支持 aptX 编解码器,允许开发者选择更高质量的音频编码。

AudioAttributes audioAttributes = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .build();

Android 6.0 - 动态权限管理

在 Android 6.0 中,蓝牙权限的动态管理成为必须,应用需在运行时请求蓝牙权限。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH) 
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(activity, 
        new String[]{Manifest.permission.BLUETOOTH}, REQUEST_CODE);
}

Android 7.0 - 多设备管理

Android 7.0 允许通过 BluetoothProfile API 获取和管理多个蓝牙设备的连接状态,使多设备管理更加简便。

List<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices().stream()
    .filter(device -> device.getType() == BluetoothDevice.DEVICE_TYPE_CLASSIC)
    .collect(Collectors.toList());

Android 8.0 - 支持蓝牙 5.0

Android 8.0 引入对蓝牙 5.0 特性的支持,增强了设备之间的数据传输速率和连接距离。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter.isMultipleAdvertisementSupported()) {
    // 支持蓝牙 5.0 特性
}

Android 9.0 - 用户交互与设置跳转

在 Android 9.0 中,如果应用尝试访问蓝牙功能而未开启蓝牙,系统会通过 Intent 提示用户开启蓝牙。

if (!bluetoothAdapter.isEnabled()) {
    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(intent, REQUEST_ENABLE_BT);
}

Android 10 - 强化蓝牙权限控制

Android 10 继续强化了蓝牙权限控制,确保应用必须明确请求权限,并提供了更清晰的用户反馈。

Android 11 - BLE Audio 支持

Android 11 引入 BLE Audio 的支持,通过新的 API 管理音频流的传输和格式。

BluetoothAudio audio = new BluetoothAudio();
audio.startAudioStream();

Android 12 - Bluetooth API 重构

在 Android 12 中,Bluetooth API 经过重构,提供了更简洁的接口,使得设备管理和控制变得更加高效。

  • 简化设备连接和管理
    新增 BluetoothDevice 和 BluetoothGatt 的使用方式,使得设备的连接和数据传输更为直观。
    通过引入新的方法,开发者可以更快速地获取设备的状态和信息。

  • 统一的蓝牙接口
    提供了更统一的接口用于处理不同类型的蓝牙设备(如经典蓝牙和 BLE 设备),简化了代码的复杂度。
    通过新的 BluetoothManager 和 BluetoothProfile 类,开发者能够更方便地管理多种蓝牙设备。

  • 增强的权限管理
    增加了对蓝牙权限的细化管理,要求开发者在使用 API 之前进行权限检查,以提高用户数据的安全性。
    示例代码:

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

if (bluetoothAdapter != null && bluetoothAdapter.isEnabled()) {
    BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
    device.connectGatt(this, false, gattCallback);
}

Android 13 - LC3 编解码器支持

Android 13 新增 LC3 编解码器支持,开发者可以使用相应 API 进行音频编码设置。

  • LC3 编解码器的引入
    LC3 编解码器是蓝牙音频的下一代标准,相较于传统的 SBC 编解码器,提供了更高的音频质量和更低的延迟。
    开发者可以通过新的 API 来设置和控制音频的编码格式。
  • 新的音频接口
    引入了新的音频属性设置,使得开发者能够在传输过程中选择使用 LC3 编解码器。
    相关的 API 方法允许动态切换编码器,适应不同的网络条件和用户需求。
    示例代码:
BluetoothAudioConfig audioConfig = new BluetoothAudioConfig.Builder()
        .setCodec(BluetoothAudioConfig.CODEC_LC3)
        .setSampleRate(BluetoothAudioConfig.SAMPLE_RATE_44100)
        .setChannelMode(BluetoothAudioConfig.CHANNEL_MODE_STEREO)
        .build();

bluetoothA2dp.setAudioConfig(device, audioConfig);

总结

随着 Android 版本的迭代,蓝牙功能的开发和管理变得越来越简化与高效。尤其是在 Android 9.0 及更高版本中,权限管理和用户交互的加强为用户提供了更安全的体验。同时,源代码的变化为开发者提供了更强大的蓝牙功能支持。了解这些变化将帮助开发者更好地利用蓝牙功能并提升应用的用户体验。