将发现的蓝牙设备写入文本文件

时间:2013-01-25 11:51:22

标签: android bluetooth broadcastreceiver text-files

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

例如我的设备发现“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);
        }
    }
};

2 个答案:

答案 0 :(得分: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);
            }
        }
    };

虽然我没有测试过它。刚刚实现了逻辑。如果需要,进行相关调整。

答案 1 :(得分:0)

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

writer = new FileWriter(deviceFiles, true);
writer.write(deviceName);