1

我编写了一个代码,它应该发现蓝牙设备并将其写入文本文件。但是在写入文本文件时,只写入最后找到的设备,其余的将被忽略。

例如,我的设备发现“abcd”、“efgh”和“ijkl”蓝牙设备,只有“ijkl”被写入文本文件。

如何将所有发现的设备写入文本文件?

下面是我的广播接收器的代码

    private final BroadcastReceiver bcReceiver = 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);

            deviceName = device.getName();

            try{
                File root = new File(Environment.getExternalStorageDirectory(), "Folder");
                if(!root.exists()){
                    root.mkdirs();
                }
                File deviceFiles = new File(root, "File");
                FileWriter writer = new FileWriter(deviceFiles);
                writer.append(deviceName);
                writer.flush();
                writer.close();
            }catch(IOException e){
                e.printStackTrace();
            }
            btArrayAdapter.add(deviceName);
        }
    }
};
4

2 回答 2

0

发生这种情况是因为,每次找到新设备时,您都在创建一个新文件。因此,在将abcd设备保存在文件中(例如DeviceFile)之后,它会搜索下一个设备,在找到efgh时,它会创建一个文件DeviceFile来替换旧设备。因此只有最后一个设备保存在文件中。

因此,在开始扫描之前创建文件。

编辑-

    private final BroadcastReceiver bcReceiver = new BroadcastReceiver() {
        File deviceFiles;

        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                File root = new File(
                        Environment.getExternalStorageDirectory(), "Folder");
                if (!root.exists()) {
                    root.mkdirs();
                }
                deviceFiles = new File(root, "File");
            } catch (Exception e) {

            }
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent
                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                deviceName = device.getName();
                try {
                    BufferedWriter out = new BufferedWriter(new FileWriter(
                            "deviceFiles", true));
                    out.write(deviceName);
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                btArrayAdapter.add(deviceName);
            }
        }
    };

虽然我还没有测试过。刚刚实现了逻辑。必要时进行相关调整。

于 2013-01-25T11:58:45.110 回答
0

首先 - 按照 Sahil 的建议,在开始扫描之前创建文件。
还可以使用参数以附加模式打开文件-

writer = new FileWriter(deviceFiles, true);
writer.write(deviceName);
于 2013-01-25T12:12:30.957 回答