android 如何蓝牙通信

通信示例

Android 提供了 Bluetooth API 来进行蓝牙通信。下面是一个简单的蓝牙通信的示例:

  1. 获取 BluetoothAdapter 对象

在进行蓝牙通信之前,需要获取 BluetoothAdapter 对象。BluetoothAdapter 是 Android 中 Bluetooth 相关操作的入口点,它提供了所有与 Bluetooth 相关的操作方法。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  1. 打开蓝牙
if (!bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
  1. 搜索设备
bluetoothAdapter.startDiscovery();
  1. 连接设备
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();

其中,address 是要连接的设备地址,MY_UUID 是应用程序自己定义的 UUID。

  1. 传输数据
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 读取数据
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
// 发送数据
outputStream.write(buffer, 0, len);

在数据传输完成后,需要关闭 socket 和 BluetoothAdapter。

socket.close();
bluetoothAdapter.disable();

需要注意的是,在进行蓝牙通信时,需要获取 BLUETOOTH 和 BLUETOOTH_ADMIN 权限。可以在 AndroidManifest.xml 文件中添加如下代码:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

以上是一个简单的蓝牙通信的示例,实际应用中可能需要更复杂的操作和处理。建议参考 Android 官方文档来进行更详细的了解和学习。

动态获取权限

在 Android 中,如果您的应用需要使用蓝牙功能,则需要在 AndroidManifest.xml 文件中声明 BLUETOOTH 权限。但是,从 Android 6.0(API 级别 23)开始,您还需要动态请求 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限以便使用蓝牙功能。这是因为蓝牙扫描功能需要访问设备的位置信息。

以下是动态请求蓝牙权限的示例代码:

private static final int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 123;

// 检查权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    // 如果没有权限,则请求权限
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
}

// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
    if (requestCode == MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限已授予,可以执行相应操作
        } else {
            // 权限被拒绝,无法执行相应操作
        }
    }
}

在这个示例中,我们首先检查是否已经获得了 Manifest.permission.ACCESS_COARSE_LOCATION 权限。如果没有,我们调用 ActivityCompat.requestPermissions() 方法来请求权限。然后,在 onRequestPermissionsResult() 方法中处理权限请求的结果。如果权限被授予,我们可以执行相应的操作。如果权限被拒绝,我们需要相应地处理。

需要注意的是,如果您的应用需要使用 BluetoothAdapter 的其他功能,例如启用蓝牙或搜索蓝牙设备,则还需要请求 BLUETOOTH 和 BLUETOOTH_ADMIN 权限。同样,应该向用户解释为什么需要这些权限,并确保用户理解和同意。

你可能感兴趣的:(android)