如何使用android 2.1 sdk解开蓝牙设备

在Android 2.1中,要取消配对蓝牙设备,您可以转到蓝牙设置,长按设备并select取消配对以取消配对该设备。 我希望能够从我的应用程序做到这一点。 我可以使用BluetoothAdapter.getBondedDevices()检索配对/绑定设备的列表,但我找不到如何配对。 我已经探索了BluetoothChat示例,并且我search了sdk,但是仍然找不到允许这个的API。

我如何取消配对蓝牙设备?

Solutions Collecting From Web of "如何使用android 2.1 sdk解开蓝牙设备"

这里是你如何解除/删除绑定设备调用这个方法,其中macAddress是设备的MAC地址的string..“00:02:00:A3:03:05”

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

要获得IBluetooth对象,您需要经过几个步骤

  1. 在你的项目中创build一个名为android.bluetooth的包
  2. 创build两个文件,IBluetooth.aidl和IBluetoothCallback.aidl
  3. 在您的文件中创build方法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); } 

其他方式:

 public void clear(View v) { Set<BluetoothDevice> 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 Paired"); } } catch (Throwable th) { Log.e(TAG, "Error pairing", th); } } 

可以通过droid java手动取消配对设备。

你可以调用一个隐藏的方法来删除债券。