Android平台Bluetooth GATT Server如何设置Appearance特征?
解决Android Bluetooth GATT Server无法修改Appearance的问题
我之前做Android GATT Server开发时也踩过这个坑,你遇到的问题核心在于:系统已经默认维护了Generic Access Profile(GAP)服务,你不能手动创建这个服务或它的Appearance特征,得用系统提供的专属方法来修改。
具体解决步骤:
- 先明确:GAP服务的标准UUID是固定的
00001800-0000-1000-8000-00805f9b34fb,这是蓝牙联盟定义的规范值。不要尝试自己创建这个服务——系统后台已经在管理它,手动创建的服务会和系统自带的冲突,完全不会生效。 - 直接通过
BluetoothAdapter设置Appearance值:- 获取
BluetoothAdapter实例:BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - 调用
setAppearance()方法传入对应外观值,比如设置为心率传感器就传0x0340,这个值要参考蓝牙官方的设备外观编码定义(不同设备类型对应不同十六进制值):// 示例:设置设备外观为心率传感器 bluetoothAdapter.setAppearance(0x0340);
- 获取
- 权限注意:Android 11及以下需要申请
BLUETOOTH_ADMIN权限;Android 12及以上除了BLUETOOTH_ADMIN,还需要动态申请BLUETOOTH_CONNECT权限。
为什么手动创建Appearance特征没用?
GAP服务属于蓝牙栈的核心基础服务,由系统底层维护。外部蓝牙设备只会读取系统维护的那个GAP服务里的Appearance值,你在自定义GATT Server里创建的同名服务/特征根本不会被识别,所以手动操作完全是白费功夫。
你用的Android Things样例只专注于自定义GATT服务的实现,没有涉及系统GAP服务的修改,所以需要额外添加上述代码来完成外观设置。
内容的提问来源于stack exchange,提问作者Delta
相关产品推荐
相关产品推荐

