Trennen Sie eine Bluetooth-Buchse in Android


2 Answers

Ich habe festgestellt, dass, wenn ich socket.close () zu früh nach einer kürzlichen Kommunikation über den OutputStream aufruft, der Abschluss fehlschlägt und ich die Verbindung nicht wiederherstellen kann. Ich habe einen Thread.sleep (1000) kurz vor dem Aufruf von close () hinzugefügt und dies scheint es zu lösen.

Question

Ich entwickle ein Programm, bei dem ich mich von einem Android Phone aus als Client mit einem medizinischen Bluetooth-Sensor verbinden muss. Ich benutze die offizielle Bluetooth-API und kein Problem während der Verbindung (SPP-Profil), aber wenn ich den Socket schließe, ist der Sensor immer noch mit meinem Telefon verbunden (obwohl ich die Verbindung geschlossen habe).

Gibt es eine Möglichkeit, eine Bluetooth-Verbindung zu trennen? Ich denke, es gibt eine Absicht namens ACTION_ACL_CONNECTED, die das tut. Kann mir jemand erklären, wie man das benutzt?

Danke im Voraus.

EDITED: Hier ist der Code, wenn jemand weitere Informationen benötigt, ist es ein Nonin 4100 medizinischer Sensor.

Set<BluetoothDevice> pairedDevices = Activa.myBluetoothAdapter.getBondedDevices();
        // If there are paired devices
        if (pairedDevices.size() > 0) {
            // Loop through paired devices
            for (BluetoothDevice device : pairedDevices) {
                // Add the name and address to an array adapter to show in a ListView
                String name = device.getName();
                if (name.contains("Nonin")) {
                    try {
                        found = true;
//                      socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
//                      handler.sendEmptyMessage(5);
//                      Activa.myBluetoothAdapter.cancelDiscovery();
//                      socket.connect();
                        BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(device.getAddress());
                        Method m;
                        try {
                            m = hxm.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
                            socket = (BluetoothSocket)m.invoke(hxm, Integer.valueOf(1));
                            handler.sendEmptyMessage(5);
                            socket.connect();
                        } catch (Exception e) {
                            handler.sendEmptyMessage(7);
                            e.printStackTrace();
                            break;
                        }
                        handler.sendEmptyMessage(6);
                        InputStream in = socket.getInputStream();
                        OutputStream out = socket.getOutputStream();
                        byte[] retrieve = { 0x44, 0x31};
                        out.write(retrieve);
                        byte [] ack = new byte [1];
                        in.read(ack);
                        if (ack[0] == 0x15) {
                            cancelMeasurement();
                            return;
                        }
                        byte [] data = new byte [3];
                        long timeStart = System.currentTimeMillis();
                        this.timePassed = System.currentTimeMillis() - timeStart;
                        while ((this.timePassed < (this.time))&&(this.finished)) {
                            try {
                                in.read(data);
                                processData(data);
                                Thread.sleep(1000);
                                this.timePassed = System.currentTimeMillis() - timeStart;
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                        in.close();
                        out.close();
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
}



Ich habe das gleiche Problem. Dies ist das Problem mit dem Bluetooth-Modul CSR BC417, das in vielen Geräten als seriell zu Bluetooth-Adapter mit SPP-Profil vorhanden ist. Mit einem anderen Bluetooth-Modul Android-Gerät funktioniert gut, und die Bluetooth-Freigabe der Verbindung, nachdem der Sockel geschlossen ist, aber mit Geräten mit diesem CSR-Core nicht. Getestet auf SPP Bluetooth zu Serial Adapter basierend auf CSR BC417 und Bluetooth-Modul von Actisys. Beide mit Android 4.0-Geräten. Ich weiß nicht warum, aber ist ein Kompatibilitätsproblem zwischen Harwares, versuchen Sie, den seriellen Adapter für einen anderen mit einem anderen Kern zu ändern. Ich probiere programmatisch, um eine Lösung zu finden, sogar ein Bluetooth zu deaktivieren, aber ist unmöglich, das Problem ist auf dem CSR-Modul entstanden.




Ich habe eine App entwickelt, die mit einem BT-Gerät verbunden ist. Ihr Code funktioniert gut in meinem HTC Wildfire, aber mit einem Samsung Galaxy I5700 funktioniert nicht. Beide sind 2.1 Update, aber .....

Die Ausnahme war 'InvocationTargetException'

Die einzige Sache, die ich ändern musste, ist das disconnect ().

private void disconnect() {
         if(Conectado){ 
            try {
                ***mBtSocket.close();***
                 texto.setText(texto.getText()+"\nDesconectado");
                 Conectado = false;
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                texto.setText(texto.getText()+"\n"+e1.getMessage());
            } 
            catch (Exception e2) {
                // TODO Auto-generated catch block
                texto.setText(texto.getText()+"\n"+e2.getMessage());
            }    
         }



Related