public class steuerung_Radarfeld extends AppCompatActivity { private BluetoothAdapter mBTAdapter; String address; String name; SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss",Locale.GERMANY); String datum_Zeit; EditText multiliner; public String mac; private Handler mHandler; private ConnectedThread mConnectedThread; private BluetoothSocket mBTSocket = null; private static final UUID BTMODULEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); public String readMessage; private final static int MESSAGE_READ = 2; private final static int CONNECTING_STATUS = 3; //Ist die Variable, welche der App sagt, wann sie wieder Daten senden darf (wenn busy = false darf sie) boolean busy = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.radarfeld); //Text View in Form eines Multiline-Textviews multiliner = (EditText) findViewById(R.id.editText4); mBTAdapter = BluetoothAdapter.getDefaultAdapter(); //MAC wird dem Intent mitgeliefert Intent intn = getIntent(); mac = intn.getStringExtra("MAC"); address = mac.substring(mac.length() - 17); name = mac.substring(0,mac.length() - 17); data(); mHandler = new Handler(){ public void handleMessage(Message msg){ if(msg.what == MESSAGE_READ) { readMessage = " "; readMessage = new String((byte[]) msg.obj, 0,msg.arg1); gibaus("Msg1: " + readMessage); //Von "XTE" werden X und E abgeschnitten, da sie nur quasi als Prüfsumme gelten. readMessage = ueberpruefungmessage(readMessage); gibaus("Msg2: " + readMessage); //Keine Datensendung von der App darf erfolgen if (readMessage == "Y"){ busy = true; } //Datensendung von der App darf erfolgen if (readMessage == "T"){ busy = false; } } } }; } private String ueberpruefungmessage(String response){ String erg = ""; int laenge = 0; int posX = -1; int posY = -1; laenge = response.length(); posX = response.indexOf('X'); posY = response.indexOf('E'); gibaus(String.valueOf(laenge)); gibaus(String.valueOf(posX)); gibaus(String.valueOf(posY)); if (posX == 0 && posY == (laenge - 1)){ erg = response.substring(posX + 1,posY); } else { erg = "Fehler in der Übertragung"; // Fehler erscheint bei der fehlerhaften Übertragung } return erg; } //Ausgabe im Textview private void gibaus(String eg){ datum_Zeit = dateFormat.format(new java.util.Date()); multiliner.append(datum_Zeit + " : " + eg + "\n"); } public void data(){ new Thread() { public void run() { boolean fail = false; BluetoothDevice device = mBTAdapter.getRemoteDevice(address); try { mBTSocket = createBluetoothSocket(device); } catch (IOException e) { fail = true; Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_SHORT).show(); } try { mBTSocket.connect(); } catch (IOException e) { try { fail = true; mBTSocket.close(); mHandler.obtainMessage(CONNECTING_STATUS, -1, -1) .sendToTarget(); } catch (IOException e2) { Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_SHORT).show(); } } if(!fail) { mConnectedThread = new ConnectedThread(mBTSocket); mConnectedThread.start(); mHandler.obtainMessage(CONNECTING_STATUS, 1, -1, name) .sendToTarget(); } } }.start(); } private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { return device.createRfcommSocketToServiceRecord(BTMODULEUUID); } private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) { mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; try { tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream(); } catch (IOException e) { } mmInStream = tmpIn; mmOutStream = tmpOut; } //Lesen der Daten, welche vom Arduino kommen public void run() { int bytes; while (true) { try { bytes = mmInStream.available(); if(bytes != 0) { bytes = mmInStream.available(); byte[] buffer = new byte[bytes]; bytes = mmInStream.read(buffer, 0, bytes); mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) .sendToTarget(); } } catch (IOException e) { e.printStackTrace(); break; } } } } }