안드로이드에서 Ble 연결 후, 응답받은 패킷을 csv 파일에 쓰려고 한다.
csv 파일명은 연결됐을 때 date time으로 하고, 응답 받을 때 마다(onCharacteristicChanged) 해당 csv 파일에 byte를 write 할 수 있도록 한다.
override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
super.onServicesDiscovered(gatt, status)
time = SimpleDateFormat("yyyyMMdd_HH:mm:ss").format(Calendar.getInstance().time)
...
}
폴더 루트는 아래와 같다.
val path = Environment.getExternalStoragePublicDirectory("/Example")
override fun onCharacteristicRead(
gatt: BluetoothGatt?,
characteristic: BluetoothGattCharacteristic,
status: Int
) {
super.onCharacteristicRead(gatt, characteristic, status)
if (status == BluetoothGatt.GATT_SUCCESS) {
csvFirst()
...
}
}
fun csvFirst(){
val headerData = "time,byte"
val file = File(BleInfo.path, "$time.csv")
val bw = BufferedWriter(FileWriter(file))
try {
bw.write("$headerData\n")
bw.flush()
bw.close()
}
catch (e: Exception) {
Toast.makeText(this, "Error on writing file ${e.message}", Toast.LENGTH_LONG).show()
}
}
override fun onCharacteristicChanged(
gatt: BluetoothGatt?,
characteristic: BluetoothGattCharacteristic
) {
super.onCharacteristicChanged(gatt, characteristic)
csvSave(characteristic.value)
}
fun csvSave(data: ByteArray){
val parTime = SimpleDateFormat("yyyyMMdd_HH:mm:ss").format(Calendar.getInstance().time)
val file = File(BleInfo.path, "$time.csv")
val bw = BufferedWriter(FileWriter(file, true))
try {
bw.write("$parTime,"+data.joinToString(",")+"\n")
bw.flush()
bw.close()
}
catch (e: Exception) {
Toast.makeText(this, "Error on writing file ${e.message}", Toast.LENGTH_LONG).show()
}
}
BufferedWriter와 FileWriter를 사용하여 csv 파일을 쓴다.
이때 존재하는 파일이 있으면 이어 쓸 수 있도록 하였다. -> FileWriter(file, true)
또한, Array를 ,를 붙인 String으로 만들기 위해 joinToString(",")을 사용하였다.