【Android】 Bluetooth Settings 开启流程

Bluedroid框架

在这里插入图片描述
在这里插入图片描述

一.蓝牙主要涉及到的类

  1. BluetoothSettings.java

蓝牙配置和连接管理界面,就是咱们常见的蓝牙界面。它管理着蓝牙界面的加载,蓝牙搜索,蓝牙连接,蓝牙重命名等管理功能

  1. BluetoothEnable.java

蓝牙辅助类,用来管理蓝牙的开和关以及蓝牙状态的标题显示。如打开或关闭蓝牙的switchbar的状态和文本显示。

  1. DeviceListPreferenceFragment.java

BluetoothSettings类的父类,是一个抽象类,该类包含了用于保存蓝牙设备的链表以及蓝牙。同时实现BluetoothCallback接口,实现蓝牙设备的一些回调方法。

  1. BluetoothCallback.java

蓝牙设备的删除、扫描状态的改变、蓝牙状态的改变等回调抽象方法。

  1. CachedBluetoothDevice.java

缓存蓝牙设备,该类代表了一个远程设备,它包含了蓝牙设备的一些属性(例如蓝牙地址,名字,信号强度等)。该类还可以进行蓝牙设备的连接、配对、断开连接等功能。位于SettingsLib

  1. BluetoothDevice.java

表示远程蓝牙设备。 使用{@link BluetoothDevice}可以创建与相应设备的连接或查询有关它的信息,例如名称,地址,类和绑定状态。位于frameworks中

  1. BluetoothDevicePreference.java

在设置界面显示蓝牙设备的偏好类型。点击界面上的配对、连接、断开就是在这操作的。

  1. BluetoothAdapter.java

表示本地设备蓝牙适配器。 {@link BluetoothAdapter}允许您执行基本的蓝牙任务,例如启动设备发现,查询绑定(配对)设备列表,使用已知MAC地址实例化{@link BluetoothDevice},以及创建{@link BluetoothServerSocket} 监听来自其他设备的连接请求,并开始扫描蓝牙LE设备。位于frameworks中

  1. BluetoothEventManager.java

BluetoothEventManager从蓝牙API接收广播和回调,并将UI线程上的事件分派到设置中显示。位于SettingsLib

10.LocalBluetoothAdapter.java

蓝牙接口适配为本地的蓝牙接口适配器,为应用提供接口,同时调用BluetoothAdapter的接口,起到应用和底层的适配作用。

  1. CachedBluetoothDeviceManager.java

负责管理蓝牙的缓存(已配对的设备和搜索到的设备)主要都保存在List mCachedDevices中。位于SettingsLib

  1. LocalBluetoothProfileManager.java

提供访问有效的蓝牙协议对象LocalBluetoothProfile。位于SettingsLib

  1. BluetoothManager.java

高级管理员用于获取{@link BluetoothAdapter}的实例并进行整体蓝牙管理。

  1. BluetoothManagerService.java

  2. AdapterState.java

状态机处理蓝牙适配器状态

二.蓝牙开启流程

1.BluetoothEnabler.java—>onSwitchToggled()

开启和关闭蓝牙的switchbar的监听状态存在与BluetoothEnable类中,当点击switchbar时,由于BluetoothEnabler implements SwitchWidgetController.OnSwitchChangeListener ,所以会调用onSwitchToggled

更多具体流程如下

用户交互:打开蓝牙设置

用户通常通过以下几种方式打开蓝牙设置:

快捷方式:从顶部状态栏的快捷开关中打开蓝牙设置。
系统设置菜单:打开设置应用,选择 “蓝牙” 或 “连接设置”。
语音命令:通过 Google Assistant 或类似的语音助手执行蓝牙设置操作。

Activity 启动:启动 BluetoothSettingsActivity

用户点击蓝牙设置时,Android 系统启动一个 Activity 来展示蓝牙设置界面:

  • 蓝牙设置的 Activity 通常是 BluetoothSettingsActivityBluetoothSettingsFragment
  • Android 系统通过 Intent 触发这个 Activity。例如:
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intent);
  • 这会加载系统提供的蓝牙设置 UI。

Bluetooth Adapter 初始化

当蓝牙设置界面打开时,系统会检查当前蓝牙的状态(是否启用、连接设备、扫描状态等),并初始化核心的蓝牙组件——BluetoothAdapter

  • BluetoothAdapter 是 Android 系统提供的用于管理蓝牙操作的核心 API。
  • 在此时,BluetoothAdapter 会被调用以检查当前蓝牙模块的状态,并获取设备信息。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

Bluetooth Manager & Bluetooth Service

BluetoothManager 是 Android 中用于管理蓝牙的核心系统服务。它通过后台的 BluetoothService 进行实际操作。

  • BluetoothManager:负责管理所有蓝牙相关的操作,包含开启/关闭蓝牙、获取已配对设备、管理连接设备等。
  • BluetoothService:运行在系统后台,管理所有蓝牙硬件操作及设备之间的通信。
    服务调用流程:
  • BluetoothManager 通过调用 BluetoothService,检查蓝牙的当前状态,并将信息反馈给用户界面。
  • 如果蓝牙未开启,系统会提示用户启用蓝牙,通常通过一个弹窗请求确认:
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

获取配对和已连接设备信息

在蓝牙设置页面加载时,系统会通过 BluetoothAdapter 获取当前已配对设备和已连接设备的列表,并将其显示在界面上。

  • 系统调用 BluetoothAdapter.getBondedDevices() 获取已配对设备:
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();

系统会展示设备的名称、MAC 地址等信息,同时显示设备的连接状态。

监听蓝牙状态变化

蓝牙设置页面通常需要监听蓝牙状态的实时变化,比如:

  • 蓝牙启用/禁用的状态。
  • 新设备被发现。
  • 设备的连接状态变化(连接、断开连接)。
    系统通过 BroadcastReceiver 监听各种蓝牙相关的广播消息。常见的广播包括:
  • BluetoothAdapter.ACTION_STATE_CHANGED:蓝牙开启/关闭的状态变化。
  • BluetoothDevice.ACTION_FOUND:新设备被发现(扫描时)。
  • BluetoothDevice.ACTION_BOND_STATE_CHANGED:配对状态变化。
    通过注册 BroadcastReceiver,蓝牙设置页面能够动态更新界面上的设备信息。

用户操作蓝牙设置

在蓝牙设置页面,用户可以执行以下操作:

  • 开启/关闭蓝牙:用户通过界面上的开关启用或关闭蓝牙。这会触发对 BluetoothAdapter 的启用/关闭操作:
bluetoothAdapter.enable();  // 启用蓝牙
bluetoothAdapter.disable(); // 禁用蓝牙
  • 扫描设备:用户点击 “扫描” 按钮,开始搜索周围的蓝牙设备。系统调用 BluetoothAdapter.startDiscovery() 以发现新设备。
  • 配对设备:用户选择一个设备并配对。系统会执行蓝牙配对流程,并通过 PIN 码或配对请求进行确认。
  • 连接设备:用户可以选择已配对的设备进行连接。常见的连接方式包括 A2DP(音频设备)和 HID(输入设备)等。

清理和关闭蓝牙设置

当用户退出蓝牙设置页面时,系统会清理与该页面相关的资源:

取消注册 BroadcastReceiver 以停止监听蓝牙状态变化。
如果正在执行设备扫描,系统会调用 BluetoothAdapter.cancelDiscovery() 以停止扫描操作。
总结
Bluetooth Settings 开启的流程大致如下:

1.用户通过各种方式打开蓝牙设置。
2. 启动 BluetoothSettingsActivity 并加载蓝牙界面。
3. 系统通过 BluetoothAdapter 和 BluetoothManager 获取当前的蓝牙状态和设备信息。
4. 系统展示已配对设备和连接状态。
5. 通过 BroadcastReceiver 监听蓝牙状态变化,并响应用户操作(如启用/禁用蓝牙、扫描设备等)。
6. 用户退出蓝牙设置时,系统清理相关资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值