Android各种蓝牙设备的UUID

本文介绍了蓝牙设备中各项服务对应的UUID,这些唯一标识符用于区分不同的蓝牙服务,包括串口服务、拨号网络服务、文件传输服务等。了解这些UUID有助于进行蓝牙设备间的正确连接与数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UUID是“Universally Unique Identifier”的简称,通用唯一识别码的意思。对于蓝牙设备,每个服务都有通用、独立、唯一的UUID与之对应。也就是说,在同一时间、同一地点,不可能有两个相同的UUID标识的不同服务。

以上的文字主要是起到一个明白概念的作用。在Android手机方面不必过多考虑这点在这一点,因为几乎没有哪个手机会同时装两块蓝牙芯片~~~~~

以下是转载……各种蓝牙服务对于的UUID码

ServiceDiscoveryServerServiceClassID_UUID = ‘{00001000-0000-1000-8000-00805F9B34FB}’
BrowseGroupDescriptorServiceClassID_UUID = ‘{00001001-0000-1000-8000-00805F9B34FB}’
PublicBrowseGroupServiceClass_UUID = ‘{00001002-0000-1000-8000-00805F9B34FB}’

#蓝牙串口服务
SerialPortServiceClass_UUID = ‘{00001101-0000-1000-8000-00805F9B34FB}’

LANAccessUsingPPPServiceClass_UUID = ‘{00001102-0000-1000-8000-00805F9B34FB}’

#拨号网络服务
DialupNetworkingServiceClass_UUID = ‘{00001103-0000-1000-8000-00805F9B34FB}’

#信息同步服务
IrMCSyncServiceClass_UUID = ‘{00001104-0000-1000-8000-00805F9B34FB}’

SDP_OBEXObjectPushServiceClass_UUID = ‘{00001105-0000-1000-8000-00805F9B34FB}’

#文件传输服务
OBEXFileTransferServiceClass_UUID = ‘{00001106-0000-1000-8000-00805F9B34FB}’

IrMCSyncCommandServiceClass_UUID = ‘{00001107-0000-1000-8000-00805F9B34FB}’
SDP_HeadsetServiceClass_UUID = ‘{00001108-0000-1000-8000-00805F9B34FB}’
CordlessTelephonyServiceClass_UUID = ‘{00001109-0000-1000-8000-00805F9B34FB}’
SDP_AudioSourceServiceClass_UUID = ‘{0000110A-0000-1000-8000-00805F9B34FB}’
SDP_AudioSinkServiceClass_UUID = ‘{0000110B-0000-1000-8000-00805F9B34FB}’
SDP_AVRemoteControlTargetServiceClass_UUID = ‘{0000110C-0000-1000-8000-00805F9B34FB}’
SDP_AdvancedAudioDistributionServiceClass_UUID = ‘{0000110D-0000-1000-8000-00805F9B34FB}’
SDP_AVRemoteControlServiceClass_UUID = ‘{0000110E-0000-1000-8000-00805F9B34FB}’
VideoConferencingServiceClass_UUID = ‘{0000110F-0000-1000-8000-00805F9B34FB}’
IntercomServiceClass_UUID = ‘{00001110-0000-1000-8000-00805F9B34FB}’

#蓝牙传真服务
FaxServiceClass_UUID = ‘{00001111-0000-1000-8000-00805F9B34FB}’

HeadsetAudioGatewayServiceClass_UUID = ‘{00001112-0000-1000-8000-00805F9B34FB}’
WAPServiceClass_UUID = ‘{00001113-0000-1000-8000-00805F9B34FB}’
WAPClientServiceClass_UUID = ‘{00001114-0000-1000-8000-00805F9B34FB}’

#个人局域网服务
PANUServiceClass_UUID = ‘{00001115-0000-1000-8000-00805F9B34FB}’

#个人局域网服务
NAPServiceClass_UUID = ‘{00001116-0000-1000-8000-00805F9B34FB}’

#个人局域网服务
GNServiceClass_UUID = ‘{00001117-0000-1000-8000-00805F9B34FB}’

DirectPrintingServiceClass_UUID = ‘{00001118-0000-1000-8000-00805F9B34FB}’
ReferencePrintingServiceClass_UUID = ‘{00001119-0000-1000-8000-00805F9B34FB}’
ImagingServiceClass_UUID = ‘{0000111A-0000-1000-8000-00805F9B34FB}’
ImagingResponderServiceClass_UUID = ‘{0000111B-0000-1000-8000-00805F9B34FB}’
ImagingAutomaticArchiveServiceClass_UUID = ‘{0000111C-0000-1000-8000-00805F9B34FB}’
ImagingReferenceObjectsServiceClass_UUID = ‘{0000111D-0000-1000-8000-00805F9B34FB}’
SDP_HandsfreeServiceClass_UUID = ‘{0000111E-0000-1000-8000-00805F9B34FB}’
HandsfreeAudioGatewayServiceClass_UUID = ‘{0000111F-0000-1000-8000-00805F9B34FB}’
DirectPrintingReferenceObjectsServiceClass_UUID = ‘{00001120-0000-1000-8000-00805F9B34FB}’
ReflectedUIServiceClass_UUID = ‘{00001121-0000-1000-8000-00805F9B34FB}’
BasicPringingServiceClass_UUID = ‘{00001122-0000-1000-8000-00805F9B34FB}’
PrintingStatusServiceClass_UUID = ‘{00001123-0000-1000-8000-00805F9B34FB}’

#人机输入服务
HumanInterfaceDeviceServiceClass_UUID = ‘{00001124-0000-1000-8000-00805F9B34FB}’

HardcopyCableReplacementServiceClass_UUID = ‘{00001125-0000-1000-8000-00805F9B34FB}’

#蓝牙打印服务
HCRPrintServiceClass_UUID = ‘{00001126-0000-1000-8000-00805F9B34FB}’

HCRScanServiceClass_UUID = ‘{00001127-0000-1000-8000-00805F9B34FB}’
CommonISDNAccessServiceClass_UUID = ‘{00001128-0000-1000-8000-00805F9B34FB}’
VideoConferencingGWServiceClass_UUID = ‘{00001129-0000-1000-8000-00805F9B34FB}’
UDIMTServiceClass_UUID = ‘{0000112A-0000-1000-8000-00805F9B34FB}’
UDITAServiceClass_UUID = ‘{0000112B-0000-1000-8000-00805F9B34FB}’
AudioVideoServiceClass_UUID = ‘{0000112C-0000-1000-8000-00805F9B34FB}’
SIMAccessServiceClass_UUID = ‘{0000112D-0000-1000-8000-00805F9B34FB}’
PnPInformationServiceClass_UUID = ‘{00001200-0000-1000-8000-00805F9B34FB}’
GenericNetworkingServiceClass_UUID = ‘{00001201-0000-1000-8000-00805F9B34FB}’
GenericFileTransferServiceClass_UUID = ‘{00001202-0000-1000-8000-00805F9B34FB}’
GenericAudioServiceClass_UUID = ‘{00001203-0000-1000-8000-00805F9B34FB}’
GenericTelephonyServiceClass_UUID = ‘{00001204-0000-1000-8000-00805F9B34FB}’

转自:http://www.14blog.com/archives/481

<think>嗯,用户想在Android Studio中实现基于UUID的蓝牙自动连接功能。首先,我需要回忆一下Android蓝牙开发的基本流程和相关API。记得蓝牙连接通常需要几个步骤:权限声明、启用蓝牙、搜索设备、配对连接,然后通过UUID建立通信。 首先,权限方面,用户需要在AndroidManifest.xml中添加蓝牙权限和定位权限,因为扫描设备需要定位权限。引用[4]提到了这些权限,包括BLUETOOTH、BLUETOOTH_ADMIN和ACCESS_FINE_LOCATION。这点很重要,如果缺少权限,应用可能会崩溃或者无法发现设备。 接下来是启用蓝牙。根据引用[3],可以使用BluetoothAdapter的enable()方法,但更推荐的是通过Intent请求用户启用,这样更友好。用户可能希望自动连接,但启用蓝牙还是需要用户同意的,所以代码中应该包含检查蓝牙是否启用,如果没有,就发送请求。 然后是搜索和配对设备。自动连接可能需要预先知道目标设备的MAC地址或者名称,这样不需要每次都扫描。如果用户希望自动连接特定设备,可能需要保存该设备的地址,然后直接获取BluetoothDevice对象。引用[2]中提到了通过反射调用createBond()方法进行配对,但自动连接可能需要设备已经配对过,否则可能需要先配对。不过自动配对可能涉及安全限制,Android系统通常需要用户交互。 接下来是建立连接的部分。蓝牙连接通常分为服务端和客户端。服务端使用BluetoothServerSocket监听传入的连接,客户端使用BluetoothSocket连接服务端。UUID在这里是关键,必须两端一致。用户需要确定他们的设备使用的UUID,或者使用标准的UUID,如SPP的00001101-0000-1000-8000-00805F9B34FB。 自动连接的实现可能需要后台服务持续尝试连接,或者当蓝牙设备在范围内时自动重连。需要注意的是,频繁扫描可能会耗电,所以需要合理处理。 现在关于示例代码,可能需要结合引用中的代码片段。例如,启用蓝牙的代码来自引用[3],配对代码来自引用[2],连接部分需要创建BluetoothSocket并connect()。 可能的问题点:UUID的正确性、设备是否已配对、权限是否齐全、Android版本差异(比如定位权限在Android 12及以上需要处理)。此外,在Android 10及以上,后台访问位置权限可能更严格,需要动态请求。 总结步骤应该是:检查并启用蓝牙,获取目标设备(通过MAC地址或名称),检查配对状态,如未配对则配对,然后通过UUID创建Socket并连接。自动重连机制可能需要处理异常,并在连接失败后延迟重试。 另外,需要注意线程处理,因为网络操作不能在主线程执行,否则会引发NetworkOnMainThreadException。所以连接过程需要在子线程中进行,并使用Handler或LiveData更新UI。 最后,测试时需要确保两个设备已经配对,并且UUID一致,同时应用有必要的权限。可能还需要处理不同Android版本的兼容性问题,比如在Android 12及以上需要BLUETOOTH_SCAN权限等。</think>### Android Studio基于UUID的蓝牙自动连接实现方法 #### 一、实现步骤 1. **添加蓝牙权限** 在`AndroidManifest.xml`中添加: ```xml <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ``` 2. **启用蓝牙功能** 检查并请求开启蓝牙(需用户确认): ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!bluetoothAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BLUETOOTH); } ``` [^3][^4] 3. **获取已配对设备** 通过MAC地址直接获取目标设备: ```java String targetAddress = "00:11:22:33:44:55"; // 目标设备MAC地址 BluetoothDevice device = bluetoothAdapter.getRemoteDevice(targetAddress); ``` 4. **自动连接实现** 使用UUID创建蓝牙Socket并连接: ```java // 标准SPP UUID UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); new Thread(() -> { try { BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid); socket.connect(); // 阻塞式连接 // 连接成功后操作输入输出流 InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } }).start(); ``` #### 二、完整示例代码 ```java // 1. 检查蓝牙状态 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); if (adapter == null) { Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show(); return; } // 2. 自动重连逻辑 private void autoConnect(String macAddress) { BluetoothDevice device = adapter.getRemoteDevice(macAddress); UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(() -> { while (true) { try (BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid)) { socket.connect(); // 连接成功处理 runOnUiThread(() -> Toast.makeText(this, "连接成功", Toast.LENGTH_SHORT).show()); break; } catch (IOException e) { try { Thread.sleep(3000); // 3秒后重试 } catch (InterruptedException ex) { ex.printStackTrace(); } } } }); } ``` #### 三、注意事项 1. **Android版本适配** - Android 6.0+需要动态申请`ACCESS_FINE_LOCATION`权限 - Android 12+需要额外声明`BLUETOOTH_SCAN`权限 2. **设备配对状态** 建议先通过反射调用`createBond()`完成配对(需用户确认): ```java try { Method method = device.getClass().getMethod("createBond"); method.invoke(device); } catch (Exception e) { e.printStackTrace(); } ``` [^2] 3. **后台连接限制** Android 8.0+对后台服务的蓝牙操作有限制,建议使用前台服务实现持续连接[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值