Android 6.0及以上版本蓝牙搜索设备指南

0 下载量 175 浏览量 更新于2024-09-05 收藏 140KB PDF 举报
"本文详细介绍了Android平台上的蓝牙通信,特别是如何搜索蓝牙设备。针对Android 6.0及以上版本,文中强调了开启GPS定位权限的重要性,并提供了相关的权限配置和动态权限申请的代码示例。" 在Android系统中进行蓝牙通信是一项常见且重要的功能,尤其在设备间数据传输或物联网(IoT)应用中。以下将详细讨论搜索蓝牙设备的关键知识点: ### 1. 注意事项 #### Android 6.0及更高版本的要求 自Android 6.0 (Marshmallow)开始,系统引入了运行时权限管理。为了搜索并连接蓝牙设备,除了基本的蓝牙权限,还需要位置服务的权限。这是因为蓝牙低功耗(BLE)扫描依赖于地理位置服务,因此必须开启GPS或网络定位。 ### 2. 权限配置 在AndroidManifest.xml文件中,你需要添加以下权限: - `BLUETOOTH`:允许程序连接到已配对的蓝牙设备。 - `BLUETOOTH_ADMIN`:允许程序发现和配对蓝牙设备。 - `ACCESS_FINE_LOCATION` 和 `ACCESS_COARSE_LOCATION`:在Android 6.0及以上版本,用于蓝牙扫描和定位。 - `MOUNT_UNMOUNT_FILESYSTEMS`:在SDCard中创建和删除文件的权限。 - `WRITE_EXTERNAL_STORAGE`:往SDCard写入数据的权限。 ### 3. 动态权限申请 对于Android 6.0及以上版本,由于需要在运行时请求权限,你还需要在代码中检查和申请这些权限。例如,检查定位权限是否开启的代码示例: ```java if (Build.VERSION.SDK_INT >= 23) { boolean isLocat = isLocationOpen(getApplicationContext()); if (!isLocat) { Intent enableLocate = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(enableLocate, 1); } } ``` 在上述代码中,`isLocationOpen()` 是一个自定义方法,用于检查定位服务是否打开。如果没有打开,将启动一个意图(Intent)来引导用户到设置界面开启位置服务。 ### 4. 蓝牙设备搜索 要搜索蓝牙设备,你需要使用`BluetoothAdapter`类。首先,确保蓝牙适配器是可用的,然后调用`startDiscovery()`方法发起蓝牙设备搜索。搜索完成后,可以通过注册`BroadcastReceiver`监听`ACTION_DISCOVERY_FINISHED`广播来获取搜索结果。 ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter != null && bluetoothAdapter.isEnabled()) { bluetoothAdapter.startDiscovery(); } ``` ### 5. 监听蓝牙搜索结果 创建一个`BroadcastReceiver`来接收蓝牙搜索的结果,通过重写`onReceive()`方法处理`ACTION_FOUND`广播,获取新发现的蓝牙设备。 ```java private final BroadcastReceiver discoveryReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // 处理发现的设备 } } }; ``` 注册和注销`BroadcastReceiver`通常在`onResume()`和`onPause()`方法中进行。 ### 6. 连接蓝牙设备 找到目标设备后,你可以通过`BluetoothDevice`对象的`createRfcommSocketToServiceRecord()`方法建立一个RFCOMM(串行端口)连接,然后调用`connect()`方法尝试连接。记得在连接成功或失败后进行相应的处理。 Android蓝牙通信涉及多个步骤,包括权限配置、设备搜索、连接管理和安全策略。正确理解和应用这些知识点是实现可靠蓝牙通信的基础。