Question

J'essaie de me connecter depuis une application de bureau (écrite en Java) à une application Android via Bluetooth.
Pour l'application de bureau que j'utilise BleuCove API.
Lorsque je démarre le serveur (application de bureau) et que je démarre l'application Android, la connexion fonctionne correctement.(c'est à dire.Le client envoie un "Hello World" et le serveur l'imprime dans la console).Mais lorsque je quitte l'application (en appuyant sur le bouton Retour ou Accueil) et que j'y reviens, la connexion socket semble être perdue.

Comment vérifier si une prise Bluetooth est déjà connectée ?
Je voudrais vérifier la connexion de la prise pour ne plus avoir de connexion.

Que dois-je écrire (si c'est le cas) dans le onPause, onResume méthodes ?
Je suppose que dans le onDestroy méthode, je devrais fermer le socket.

Voici le code source du serveur client :
Serveur
Client

J'ai aussi essayé d'utiliser IntentFilter pour vérifier l'état de la connexion, mais cela n'a pas fonctionné.

@Override
    public void onCreate(Bundle savedInstanceState) {
             // ..... 

        IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
        IntentFilter filter2 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
        IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
        this.registerReceiver(mReceiver, filter1);
        this.registerReceiver(mReceiver, filter2);
        this.registerReceiver(mReceiver, filter3);

}

//The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
           //Device found
            Toast.makeText(BluetoothClient.this, "Device not found", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
          //Device is now connected
            Toast.makeText(BluetoothClient.this, "Device connected", 2).show();
        }
        else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
          //Done searching
            Toast.makeText(BluetoothClient.this, "Done searching", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {
            //Device is about to disconnect
            Toast.makeText(BluetoothClient.this, "Device about to connect", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
         //Device has disconnected
            Toast.makeText(BluetoothClient.this, "Device disconnected", 2).show();
        }           
    }
};
Était-ce utile?

La solution

Serveur
Client

J'ai modifié les 2 fichiers de code source.
Maintenant, ça devrait fonctionner correctement.Il y a quelques petits bugs concernant le fait que le BT n'est pas ouvert avant d'entrer dans l'application mobile (il reste trop bloqué au bout d'un moment) et pour ceux qui veulent utiliser ce client/serveur, vous devriez y jeter un œil onPause(), onResume(), onDestroy() les fonctions.

Le problème était que je n'utilisais pas correctement la prise.

J'espère que cela sera utile à ceux qui souhaitent implémenter une telle application avec BT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top