Android中蓝牙接收文件实现教程

整体流程

下面是实现Android中蓝牙接收文件的整体流程:

journey
    title 蓝牙接收文件流程
    section 准备工作
        开发者->小白: 准备两台手机或者一个手机和一个电脑
        开发者->小白: 确保两台设备都支持蓝牙功能
    section 连接设备
        开发者->小白: 打开设备的蓝牙
        开发者->小白: 在设备上搜索可连接的蓝牙设备
        开发者->小白: 确认连接另一台设备
    section 传输文件
        开发者->小白: 选择要传输的文件
        开发者->小白: 发送文件到另一台设备

具体步骤及代码

1. 准备工作

确保两台设备都支持蓝牙功能。

2. 连接设备

打开设备的蓝牙
// 引用形式的描述信息
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
}
if (!bluetoothAdapter.isEnabled()) {
    // 打开蓝牙
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
搜索可连接的蓝牙设备
// 引用形式的描述信息
// 创建一个广播接收器,用于接收搜索到的蓝牙设备
BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // 处理搜索到的设备
        }
    }
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);

// 开始搜索蓝牙设备
bluetoothAdapter.startDiscovery();
确认连接另一台设备
// 引用形式的描述信息
// 在搜索到设备列表中选择要连接的设备
BluetoothDevice selectedDevice = ...;

// 创建一个蓝牙socket并连接
BluetoothSocket socket = selectedDevice.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();

3. 传输文件

选择要传输的文件
// 引用形式的描述信息
// 使用文件选择器选择要传输的文件
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, PICK_FILE_REQUEST);
发送文件到另一台设备
// 引用形式的描述信息
// 在socket上创建输出流并传输文件
OutputStream outputStream = socket.getOutputStream();
File file = ...; // 从文件选择器获取的文件路径
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}
fis.close();

结尾

通过以上步骤,你应该能够实现在Android中通过蓝牙接收文件了。如果有任何疑问或者遇到问题,欢迎随时向我提问。祝你顺利实现!