How to unpair bluetooth device using android 2.1 sdk

前端 未结 4 1116
日久生厌
日久生厌 2020-11-29 23:50

In Android 2.1, to unpair a Bluetooth device you can go to Bluetooth settings, long-click on a device and select Unpair to unpair that device. I want to be able to do this f

相关标签:
4条回答
  • 2020-11-30 00:40

    It is possible to unpair a device manually throug droid java.

    You can invoke a hidden method to remove the bond.

    0 讨论(0)
  • 2020-11-30 00:47

    you can send the user to bluetooth setting, by this you can unpair devices which are paired Intent intentOpenBluetoothSettings = new Intent(); intentOpenBluetoothSettings.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); startActivity(intentOpenBluetoothSettings);`

    0 讨论(0)
  • 2020-11-30 00:53

    Another way:

    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);
        }
    }
    
    0 讨论(0)
  • 2020-11-30 00:57

    Here's how you unpair/remove a bonded device call this method where macAddress is the string of the mac address of the device..i.e. "00:02:00:A3:03:05"

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

    To get the IBluetooth Object you need to go through a couple of steps

    1. create a package in your project called android.bluetooth
    2. create two files, IBluetooth.aidl and IBluetoothCallback.aidl
    3. create method in your files called 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);
        }
    
    0 讨论(0)
提交回复
热议问题