Cómo desvincular el dispositivo bluetooth con Android 2.1 sdk

En Android 2.1, para desvincular un dispositivo Bluetooth, puede ir a la configuración de Bluetooth, hacer un clic largo en un dispositivo y seleccionar Desvincular para desvincular ese dispositivo. Quiero poder hacer esto desde mi aplicación. Puedo recuperar una lista de dispositivos emparejados / vinculados utilizando BluetoothAdapter.getBondedDevices () , pero no puedo encontrar cómo deshacer la vinculación. Exploré el ejemplo de BluetoothChat y busqué el SDK, pero aún no puedo encontrar una API que lo permita.

¿Cómo puedo desvincular un dispositivo Bluetooth?

Aquí se explica cómo desvincular / eliminar un dispositivo vinculado llama a este método, donde macAddress es la cadena de la dirección MAC del dispositivo … es decir “00: 02: 00: A3: 03: 05”

IBluetooth ib =getIBluetooth(); ib.removeBond(macAddress); 

Para obtener el Objeto IBluetooth necesita pasar por un par de pasos

  1. crea un paquete en tu proyecto llamado android.bluetooth
  2. crear dos archivos, IBluetooth.aidl e IBluetoothCallback.aidl
  3. crea un método en tus archivos llamado getBluetooth ()

     private IBluetooth getIBluetooth() { IBluetooth ibt = null; try { Class c2 = Class.forName("android.os.ServiceManager"); Method m2 = c2.getDeclaredMethod("getService",String.class); IBinder b = (IBinder) m2.invoke(null, "bluetooth"); Class c3 = Class.forName("android.bluetooth.IBluetooth"); Class[] s2 = c3.getDeclaredClasses(); Class c = s2[0]; Method m = c.getDeclaredMethod("asInterface",IBinder.class); m.setAccessible(true); ibt = (IBluetooth) m.invoke(null, b); } catch (Exception e) { Log.e("flowlab", "Erroraco!!! " + e.getMessage()); } return ibt; } 

    / * ** * ** * ** * ** IBluetooth.aidl * ** * ** * ** * ** /

     package android.bluetooth; import android.bluetooth.IBluetoothCallback; import android.os.ParcelUuid; /** * System private API for talking with the Bluetooth service. * * {@hide} */ interface IBluetooth { boolean isEnabled(); int getBluetoothState(); boolean enable(); boolean disable(boolean persistSetting); String getAddress(); String getName(); boolean setName(in String name); int getScanMode(); boolean setScanMode(int mode, int duration); int getDiscoverableTimeout(); boolean setDiscoverableTimeout(int timeout); boolean startDiscovery(); boolean cancelDiscovery(); boolean isDiscovering(); boolean createBond(in String address); boolean cancelBondProcess(in String address); boolean removeBond(in String address); String[] listBonds(); int getBondState(in String address); String getRemoteName(in String address); int getRemoteClass(in String address); ParcelUuid[] getRemoteUuids(in String address); boolean fetchRemoteUuids(in String address, in ParcelUuid uuid, in IBluetoothCallback callback); int getRemoteServiceChannel(in String address, in ParcelUuid uuid); boolean setPin(in String address, in byte[] pin); boolean setPasskey(in String address, int passkey); boolean setPairingConfirmation(in String address, boolean confirm); boolean cancelPairingUserInput(in String address); boolean setTrust(in String address, in boolean value); boolean getTrustState(in String address); int addRfcommServiceRecord(in String serviceName, in ParcelUuid uuid, int channel, IBinder b); void removeServiceRecord(int handle); } 

/ * ** * ** * ** * ** IBluetoothCallback.aidl * ** * ** * ** * ** /

  package android.bluetooth; /** * System private API for Bluetooth service callbacks. * * {@hide} */ interface IBluetoothCallback { void onRfcommChannelFound(int channel); } 

De otra manera:

 public void clear(View v) { Set bondedDevices = adapter.getBondedDevices(); try { Class btDeviceInstance = Class.forName(BluetoothDevice.class.getCanonicalName()); Method removeBondMethod = btDeviceInstance.getMethod("removeBond"); String currentMac = getCurrentMAC(); boolean cleared = false; for (BluetoothDevice bluetoothDevice : bondedDevices) { String mac = bluetoothDevice.getAddress(); if(mac.equals(currentMac)) { removeBondMethod.invoke(bluetoothDevice); Log.i(TAG,"Cleared Pairing"); cleared = true; break; } } if(!cleared) { Log.i(TAG,"Not Paird"); } } catch (Throwable th) { Log.e(TAG, "Error pairing", th); } } 

Es posible desvincular manualmente un dispositivo a través de droide java.

Puede invocar un método oculto para eliminar el vínculo.

puede enviar al usuario a la configuración Bluetooth, con esto puede desvincular los dispositivos que están emparejados Intent intentOpenBluetoothSettings = new Intent (); intentOpenBluetoothSettings.setAction (android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); startActivity (intentOpenBluetoothSettings); `