私は、Android携帯電話がBluetoothデータを送受信する必要があるプロジェクトに取り組んでいます。 ArduinoはいつもAndroidの電話機に整数値を送信し、私はAndroidの携帯電話に現在のデータの処理が終了したことを知らせることができないのかと思っていました。ここで私はAndroidでデータを受け取る方法を扱っています。AndroidとArduinoのBluetooth通信。現在のデータトランザクションが終了したことを示す方法
//Reads the arriving bluetooth data from Arduino and forwards it to other activities
//Note: Arriving BT data is in ASCII values and this class converts it to its integer
//Values before sending it.
private class btDataListener extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... devices) {
List<Integer> BtMessage = new ArrayList<>();
while(isBtConnected) {
try {
if(mmInStream != null) {
while(btSocket.getInputStream().available() > 0) {
BtMessage.add(btSocket.getInputStream().read());
}
if(BtMessage.size() > 0) {
//Send received message to Activities
Intent intent = new Intent("my-integer");
intent.putExtra("message", BtMessageToInt(BtMessage));
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
BtMessage.clear();
}
}
}
catch (Exception e) {
e.printStackTrace();
Log.d(TAG,"btCommunicationService: btDataListener: ERROR:: " + e);
}
}
return null;
}
}
これらは同じメッセージの一部と見なされません。また、私はAndroidの開発には全く新しいので、私の方法がまずはうまくいかない場合は、この状況をどのように処理するかについて、どこで読むことができるかアドバイスしてください。ありがとうございました。
メッセージが( –
)を超えていることを示すために、ソケットを閉じるか、メッセージの終わり(EOM)文字列を書くことができます。ところで、ソケットから整数や文字列を抽出する簡単な方法はありますか? Bluetoothは常に各バイトのASCII文字を受信するようです。 – Saik
Stringコンストラクタはバイト配列を受け入れます。 Stringオブジェクトを解析してintにすることができます。 –