1. Android蓝牙可见性机制解析
在Android系统中,蓝牙模块的可见性(Discoverable)控制是一个涉及系统安全性和用户体验的重要功能。默认情况下,Android设备会保持蓝牙不可见状态,这是出于隐私保护和电池优化的考虑。但在某些特定场景下,比如POS机、共享设备或工业控制终端,我们需要强制设备保持可被发现状态。
Android蓝牙可见性由BluetoothAdapter类管理,底层实现则位于frameworks/base/core/java/android/bluetooth/目录下的系统服务中。当调用setScanMode()方法时,系统会通过Binder机制将请求传递给BluetoothManagerService,最终由AdapterService处理具体逻辑。
注意:修改系统默认蓝牙可见性属于framework层定制,需要重新编译系统镜像,普通应用开发者无法通过标准API实现永久可见。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 源码修改方案详解
2.1 关键代码位置定位
根据提供的diff片段,我们需要修改的代码位于:
code复制modules/Bluetooth/android/app/src/com/android/bluetooth/btservice/AdapterService.java
这是AOSP中蓝牙模块的核心服务类,负责管理蓝牙适配器的各种状态和行为。
2.2 具体修改步骤
完整修改方案如下(基于Android 16代码):
diff复制diff --git a/modules/Bluetooth/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/modules/Bluetooth/android/app/src/com/android/bluetooth/btservice/AdapterService.java
index 182e75cce..8dc32b7c1 100644
--- a/modules/Bluetooth/android/app/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/modules/Bluetooth/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -537,6 +537,8 @@ public class AdapterService extends Service {
} else if (mRegisteredProfiles.size() == Config.getSupportedProfiles().length
&& mRegisteredProfiles.size() == mRunningProfiles.size()) {
