Bluetooth を使用してデータ (バイト) を別のクラスの配列にストリーミングする Android アプリを作成しています。この背後にある考え方は、一定量のデータを記録し (つまり、バッファ [60000])、それがいっぱいになると、バッファをファイルに書き込んで SD カードに保存することです。
私が抱えている問題は、bluetooth クラスで呼び出しが行われるたびに、HandleBluetooth.write(buffer, bytes); のメソッドを処理することです。HandleBluetooth クラスに送信するには、そのパスが作成されるたびにバッファ インデックスがリセットされます。バッファのインデックスとバッファはどちらもグローバル変数であり、なぜ毎回ハンドルを 0 に戻してインデックスを設定しているのか混乱しています。が呼び出されるため、バッファをいっぱいにしてファイルに書き込むことはできません。
ここに私のコードがあります: BluetoothSerialService.java
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[9999];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
HandleBluetooth.write(buffer, bytes);
// Send the obtained bytes to the UI Activity
//mHandler.obtainMessage(BlueTerm.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
String a = buffer.toString();
a = "";
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
ハンドル Bluetooth クラス:
public static void write(byte[] buffer, int length) {
byte[] readBuf = (byte[]) buffer;
data_length = length;
for (x = 0; x < data_length; x++) {
raw = UByte(readBuf[x]);
if (odd_even_flag == 0) {
buffer1[out_index] = raw;
// System.out.println("ch1: " + buffer1[out_index]);
odd_even_flag = 1;
} else {
buffer2[out_index] = raw;
// System.out.println("ch2: " + buffer2[out_index]);
odd_even_flag = 0;
}
if (x % 10000 == 0) {
Write2File(buffer1, buffer2);
}
out_index++;
if (x >= 60000) {
StopIncomingData();
break;
}
}
}
ご覧のとおり、グローバル クラス変数である out_index を使用してバッファのインデックスを作成しようとしています。
これは私がここで見ている何かばかげているように感じます。そのメソッドが呼び出されるたびにインデックスがリセットされる理由を理解できるように、私を正しい方向に導いてください。