Android 提供了 Bluetooth API 来进行蓝牙通信。下面是一个简单的蓝牙通信的示例:
在进行蓝牙通信之前,需要获取 BluetoothAdapter 对象。BluetoothAdapter 是 Android 中 Bluetooth 相关操作的入口点,它提供了所有与 Bluetooth 相关的操作方法。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!bluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
bluetoothAdapter.startDiscovery();
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();
其中,address 是要连接的设备地址,MY_UUID 是应用程序自己定义的 UUID。
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 权限。同样,应该向用户解释为什么需要这些权限,并确保用户理解和同意。