接下来,检查蓝牙是否已经启用。使用BluetoothAdapter的isEnabled**()**方法可以检查蓝牙是否启用:
if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) {
// 蓝牙未启用
}
bluetoothAdapter != null 说明设备支持蓝牙
!bluetoothAdapter.isEnabled() 说明蓝牙没启用
3. 请求用户启用蓝牙
如果蓝牙未启用,你可以请求用户启用它。
这可以通过启动一个Intent来请求用户启用蓝牙,而不是直接调用enable()方法,因为**enable()**方法无需用户同意即可启用蓝牙,这可能不是最佳用户体验。
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
在这里,REQUEST_ENABLE_BT是应用定义的整数请求码,用于在你的Activity的onActivityResult回调中接收结果。
4. onActivityResult回调
当用户响应启用蓝牙的请求时,系统会调用你的Activity的onActivityResult方法。
你可以在这里检查请求的结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == RESULT_OK) {
// 用户启用了蓝牙
} else {
// 用户未启用蓝牙
}
}
}
这就是如何在你的应用中启用蓝牙并检查设备是否支持蓝牙的基本步骤,理解这些步骤是进行蓝牙开发的基础。
第三节:发现设备和获取已配对设备
在这一节中,我们将学习如何发现附近的蓝牙设备以及如何获取已经与你的设备配对的蓝牙设备列表。
1. 获取已配对设备
你的Android设备可能已经与一些蓝牙设备配对过了。
要获取这些已配对的设备列表,你可以使用BluetoothAdapter的**getBondedDevices()**方法:
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
// 至少有一个已配对设备
for (BluetoothDevice device : pairedDevices) {
String deviceName = device.getName();
String deviceHardwareAddress = device.getAddress(); // MAC地址
Log.d("TAG", "蓝牙设备名称:"+deviceName);
Log.d("TAG", "蓝牙设备地址:"+deviceHardwareAddress);
}
}
2. 发现新设备
要发现附近的蓝牙设备,你需要调用BluetoothAdapter的startDiscovery()方法。这个方法是异步的,发现过程通常会持续12秒。
你需要注册一个BroadcastReceiver来监听BluetoothDevice.ACTION_FOUND广播,这个广播会在发现新设备时发送。
// 注册广播接收器以监听发现的设备
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);
// 发现设备
if (bluetoothAdapter.startDiscovery()) {
// 发现过程成功启动
}
疑问:
BluetoothDevice.ACTION_FOUND 是一个什么值?
解答:
- BluetoothDevice.ACTION_FOUND 是一个字符串常量,用于在广播中标识已找到一个蓝牙设备,值是"android.bluetooth.device.action.FOUND"。
- 当你的应用调用BluetoothAdapter的startDiscovery()方法开始扫描附近的蓝牙设备时,每发现一个设备,系统就会发送这个ACTION_FOUND的广播。
- 你的应用可以通过注册一个BroadcastReceiver来监听这个广播,以便获取每个发现的蓝牙设备的信息。
在你的BroadcastReceiver中,你可以获取发现的设备信息:
private final BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 从Intent中获取发现的BluetoothDevice
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String deviceName = device.getName();