如何使用android 2.1 sdk取消配对蓝牙设备

时间:2010-08-11 21:24:59

标签: android bluetooth

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

如何取消配对蓝牙设备?

4 个答案:

答案 0 :(得分:11)

以下是取消绑定/删除绑定设备的方法,调用此方法,其中macAddress是设备的mac地址字符串.i.e。 “00:02:00:A3:03:05”

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

要获得IBluetooth对象,您需要完成几个步骤

  1. 在您的项目中创建一个名为android.bluetooth
  2. 的包
  3. 创建两个文件,IBluetooth.aidl和IBluetoothCallback.aidl
  4. 在文件中创建名为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);
    }
    
  5. / <强> * ** * ** * ** * ** IBluetoothCallback.aidl * ** * ** * ** * ** /

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

答案 1 :(得分:3)

另一种方式:

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);
    }
}

答案 2 :(得分:0)

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

您可以调用隐藏方法来删除绑定。

答案 3 :(得分:0)

您可以将用户发送到蓝牙设置,这样您就可以取消配对的设备 Intent intentOpenBluetoothSettings = new Intent(); intentOpenBluetoothSettings.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);  startActivity(intentOpenBluetoothSettings);`