2012-03-07 6 views
29

Il progetto è di utilizzare il mio telefono Android per connettersi con i miei dispositivi arduino. ma come posso disaccoppiare quelli accoppiati. Vedo che sembra archiviato l'elenco abbinato dove il bluetoothadapter potrebbe recuperare in qualsiasi momento.Come disaccoppiare o eliminare il dispositivo bluetooth associato a livello di programmazione su Android?

PS: In primo luogo, so che il dispositivo accoppiato a pressione lunga annullerà l'accoppiamento.
ma la domanda qui è come posso fare questo accada programmaticamente?

2 °, ho controllato la classe bluetoothdevice e bluetoothAdapter, non c'è alcuna funzione per implementarlo.

grazie.

+0

provare questo: [http://stackoverflow.com/questions/3462968/how-to-unpair-bluetooth-device-using-android-2-1 -SDK] [1] [1]: http://stackoverflow.com/questions/3462968/how-to-unpair-bluetooth-device-using-android-2-1-sdk – broody

+0

@broody , altre soluzioni su questo? – antonio081014

risposta

52

Questo codice funziona per me.

private void pairDevice(BluetoothDevice device) { 
    try { 
     if (D) 
      Log.d(TAG, "Start Pairing..."); 

     waitingForBonding = true; 

     Method m = device.getClass() 
      .getMethod("createBond", (Class[]) null); 
     m.invoke(device, (Object[]) null); 

     if (D) 
      Log.d(TAG, "Pairing finished."); 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} 

private void unpairDevice(BluetoothDevice device) { 
    try { 
     Method m = device.getClass() 
      .getMethod("removeBond", (Class[]) null); 
     m.invoke(device, (Object[]) null); 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} 
+0

Funziona su JB? o.O – Ewoks

+0

@Ewoks, non so cosa intendi –

+0

Funziona su Jelly Bean (aka 4.1.x)? Perché sono abbastanza sicuro che aggiungono nuovo stack bluetooth e il metodo createBond è scomparso .. – Ewoks

1

nella classe BluetoothService esiste un metodo removebond() per disaccoppiare dispositivi accoppiati. Finalmente questo metodo chiama rmovebondnative().

+0

Farò un tentativo. Grazie. –

+0

È una api esposta pubblicamente? –

-4

Se si desidera eliminare il dispositivo bluetooth coppia per questo prima di tutto è necessario annullare l'abbinamento di tutto il dispositivo e poi fare clic sull'opzione serch troverete tutto il dispositivo è stato rimosso dalla lista.

8

disaccoppia tutti i dispositivi:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
     if (pairedDevices.size() > 0) { 
      for (BluetoothDevice device : pairedDevices) { 
       try { 
        Method m = device.getClass() 
          .getMethod("removeBond", (Class[]) null); 
        m.invoke(device, (Object[]) null); 
       } catch (Exception e) { 
        Log.e("Removing has been failed.", e.getMessage()); 
       } 
      } 
     } 
+0

Non è ** removeBond() ** che si suppone sia un metodo pubblico su BluetoothDevice? http://androidxref.com/7.1.1_r6/xref/frameworks/base/core/java/android/bluetooth/BluetoothDevice.java –

+1

No, è contrassegnato con l'annotazione '@ hide', che lo rende non disponibile al pubblico. – Christopher