it-swarm.com.de

Bluetooth-Datenübertragung zwischen zwei Android-Geräten

Ich habe diese Android-Anleitung für Bluetooth-Kommunikation befolgt 

Um genau zu erläutern, was ich tun möchte, wenn die beiden Geräte gekoppelt sind, werden auf jedem Gerät (Server und Client) zwei verschiedene Aktivitäten geöffnet, in denen auf der Serveraktivität verschiedene Schaltflächen vorhanden sind, und auf der Clientaktivität nur eine Textansicht. Ich möchte in der Lage sein, eine Taste auf dem Servergerät zu drücken und auf dem Client anzuzeigen.

Es ist mir gelungen, eine Verbindung zwischen den beiden Geräten herzustellen, aber jetzt möchte ich Daten senden, die ich nicht konnte.

Sie geben diesen Code für die Datenübertragung an:

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;

    // Get the input and output streams, using temp objects because
    // member streams are final
    try {
        tmpIn = socket.getInputStream();
        tmpOut = socket.getOutputStream();
    } catch (IOException e) { }

    mmInStream = tmpIn;
    mmOutStream = tmpOut;
}

public void run() {
    byte[] buffer = new byte[1024];  // buffer store for the stream
    int bytes; // bytes returned from read()

    // Keep listening to the InputStream until an exception occurs
    while (true) {
        try {
            // Read from the InputStream
            bytes = mmInStream.read(buffer);
            // Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
    }
}

/* Call this from the main activity to send data to the remote device */
public void write(byte[] bytes) {
    try {
        mmOutStream.write(bytes);
    } catch (IOException e) { }
}

/* Call this from the main activity to shutdown the connection */
public void cancel() {
    try {
        mmSocket.close();
    } catch (IOException e) { }
}
}

Diese Zeile erzeugt jedoch einen Fehler

// Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();

Und wird im Guide nicht erklärt. Ich weiß nicht, was der Handler ist oder tut.

Abgesehen von dem Fehler verstehe ich nicht wirklich, wo ich diesen Code einfügen soll. Sollte es in den zweiten Aktivitäten (Server und Client) sein, die ich öffne oder in der Hauptsache? Wenn es sich bei der Serveraktivität um die onClick-Methode handelt, müssen alle Schaltflächen mit einem anderen Bytecode für jede Schaltfläche gesendet werden? Und wie unterscheiden wir in diesem Kodex, wer sendet und wer empfängt?

10
Simpsons

Überprüfen Sie das BluetoothChat - Beispiel, das Google im SDK zur Verfügung stellt. Es zeigt Ihnen, wie Sie das grundlegende Versenden von Text über Bluetooth implementieren.

12
Joreyaesh

Sie können auch das Tutorial-Beispiel hier ausprobieren.

1
addy123

mit mHandler können Sie Nachrichten von Ihrem BluetoothHandle.Java an Ihre Aktivität weiterleiten. Dies hilft Ihnen bei der Aktualisierung von Meldungen auf Ihrem Bildschirm, die von BluetoothHandler zurückgegeben werden.

sie müssen mHandler aus Ihrer Aktivität erstellen und Ihren Handler so anrufen - 

mBluetoothHandler = new BluetoothHandler(this, mHandler);

und Ihr BluetoothHandler.Java hat einen Konstruktor wie dieser - 

public class BluetoothHandler { 

    public BluetoothHandler(Context context, Handler handler) {
            mAdapter = BluetoothAdapter.getDefaultAdapter();
            mState = STATE_NONE;
            mHandler = handler;
            mcontext = context;
   }

}

Weitere Informationen finden Sie im Android-Beispielprojekt Bluetooth Chat. Sie können diesen Link auch verwenden: http://myandroidappdevelop.blogspot.in/2013/05/bluetooth-chat-example.html

0
Ankit

Können Sie bitte den Fehler beschreiben, den Sie gesehen haben?

Wie von Ankit und Addy mitgeteilt, ist BlueToothChat der beste Code für Sie. Führen Sie ein Experiment durch, indem Sie es auf zwei Android-Geräten laden. Verwenden Sie einen Server als Server, um die Nachrichten zwischen ihnen auszutauschen. Ein solches Experiment hilft Ihnen, den Code zu verstehen und Ihre Codierungslogik zu bestimmen.

0
SunGa
// Enter code here

Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        byte[] writeBuf = (byte[]) msg.obj;
        int begin = (int)msg.arg1;
        int end = (int)msg.arg2;

        switch(msg.what) {
            case 1:
                String writeMessage = new String(writeBuf);
                writeMessage = writeMessage.substring(begin, end);
                break;
        }
    }
};
0
user3420105