web-dev-qa-db-fra.com

Transfert de données Bluetooth entre deux appareils Android

J'ai suivi ce guide Android pour la communication Bluetooth 

Pour expliquer exactement ce que je veux faire, lorsque les deux périphériques sont couplés, deux activités différentes s'ouvrent sur chaque périphérique (serveur et client). Sur l'activité du serveur, j'ai différents boutons et sur l'activité du client, il n'y a qu'une vue de texte. Je veux pouvoir appuyer sur un bouton du périphérique serveur et l’afficher sur le client.

J'ai réussi à établir une connexion entre les deux appareils, mais maintenant je veux envoyer des données que je n'ai pas pu faire.

Ils donnent ce code pour le transfert de données:

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) { }
}
}

Mais cette ligne génère une erreur

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

Et n'est pas expliqué dans le guide. Je ne sais pas ce que le mHandler est ou fait.

En dehors de l'erreur, je ne comprends même pas vraiment où mettre ce code. Est-ce que ce doit être dans les deuxièmes activités (serveur et client) que j'ouvre ou dans le menu principal? Si dans l'activité Serveur, doit-il être dans la méthode onClick pour tous les boutons avec un code d'octet différent à envoyer pour chaque bouton? Et dans ce code, comment distinguer qui envoie et qui reçoit?

10
Simpsons

Consultez le BluetoothChat exemple fourni par Google dans le SDK. Cela vous montrera comment implémenter l'envoi de base de texte via Bluetooth.

12
Joreyaesh

Vous pouvez également essayer l'exemple de tutoriel ici

1
addy123

mHandler est utilisé pour transmettre un message de votre BluetoothHandle.Java à votre activité. Cela vous aidera à mettre à jour les messages sur votre écran qui sont renvoyés par BluetoothHandler.

vous devez créer mHandler à partir de votre activité et appeler votre gestionnaire comme ceci - 

mBluetoothHandler = new BluetoothHandler(this, mHandler);

et votre BluetoothHandler.Java a un constructeur comme celui-ci - 

public class BluetoothHandler { 

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

}

Pour plus de détails, consultez l'exemple de projet Android Bluetooth Chat. Vous pouvez également utiliser ce lien: http://myandroidappdevelop.blogspot.in/2013/05/bluetooth-chat-example.html

0
Ankit

Pouvez-vous s'il vous plaît décrire l'erreur vue par vous?

Selon les informations fournies par Ankit et Addy, BlueToothChat est le meilleur code pour vous référer. Faites une expérience en la chargeant sur 2 appareils Android - utilisez-en un en tant que serveur et en tant que client pour échanger les messages entre eux. Une telle expérience vous aidera à comprendre son code et à décider de votre logique de codage.

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