我写了一个代码,应该发现蓝牙设备并将其写入文本文件。但是当写入文本文件时,只写入最后找到的设备,其余部分将被忽略。
例如我的设备发现“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);
}
}
};
答案 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);