Przepraszam za długie opóźnienie w odpowiedzi ale kilka rzeczy się nałożyło (dostawa modułu BT + wakacje + praca nad dostarczonym modułem 😉).
Dzięki Wielkie za odpowiedź. Zdecydowałem się (zgodnie z Waszymi zaleceniami) na komunikację przez moduł BT. Zakupiłem budżetowy moduł HC-06 (szedł z Chin, stąd tak długi czas, ale cena za to również inna). W oparciu o dokumentację androida (LINK) oraz pewien projekt (LINK)/ . Rozpocząłem pisanie aplikacji. Stanęło na przesyłaniu danych, a dokładnie odbiorze danych. Do testowania służy prosta aplikacja desktopowa napisana w C#, w której znajduje się prosta funkcja:
private void button1_Click(object sender, EventArgs e) {
if (BTSerialPort.IsOpen) {
BTSerialPort.WriteLine("abcdef");
}
}
Wynik wysłania danych jest następujący:
Kod mojego wątku:
private class ConnectedThread extends Thread {
private InputStream mmInStream = null;
private OutputStream mmOutStream = null;
public ConnectedThread(BluetoothSocket socket) {
try
{
mmInStream = socket.getInputStream();
mmOutStream = socket.getOutputStream();
}
catch(IOException e)
{
handler.post(new Runnable()
{
public void run()
{
btDisconnect();
//changeState(CONNECTION_ERROR);
mConnectedThread = null;
}
});
}
}
public void run() {
byte[] buffer = new byte[1024];
int bytesAmount;
while (true) {
try {
// Read from the InputStream
bytesAmount = mmInStream.read(buffer);
if(bytesAmount > 0)
{
byte[] newbuffer = new byte[bytesAmount];
for(int i = 0; i < bytesAmount; i++)
newbuffer[i] = buffer[i];
final String data = new String(newbuffer, "US-ASCII");
handler.post(new Runnable()
{
public void run()
{
RxTextView.append(data+"\n");
RxTextView.scrollBy(0, 1);
}
}
);
}
} catch (IOException e)
{
Log.e("BT", "watcher", e);
break;
}
}
}
void write(int one)
{
if(STATE != CONNECTED)
return;
try{
mmOutStream.write(one);
} catch(IOException e){
handler.post(new Runnable()
{
public void run()
{
btDisconnect();
//changeState(CONNECTION_ERROR);
mConnectedThread = null;
}
});
}
}
void write(String str)
{
if(STATE != CONNECTED)
return;
try{
mmOutStream.write(str.getBytes());
Toast.makeText(getApplicationContext(), "wysłano", Toast.LENGTH_LONG).show();
} catch(IOException e){
synchronized(MainActivity.this){
btDisconnect();
//changeState(CONNECTION_ERROR);
mConnectedThread = null;
}
}
}
}
Podczas debugowania faktycznie odbierana jest tablica o rozmiarze = 1, potem wchodzi jeszcze raz w pętlę i pobiera resztę... 🙁 Czy ktoś ma pomysł co jest nie tak? Z góry dzięki za pomoc 😉