Как отключить устройство Bluetooth с помощью Android 2.1 SDK - PullRequest
10 голосов
/ 12 августа 2010

В Android 2.1, чтобы отключить устройство Bluetooth, вы можете перейти в настройки Bluetooth, нажать и удерживать устройство, а затем выбрать «Отсоединить», чтобы отключить это устройство. Я хочу быть в состоянии сделать это из моего приложения. Я могу получить список сопряженных / связанных устройств, используя BluetoothAdapter.getBondedDevices () , но не могу найти, как отключить пару. Я исследовал образец BluetoothChat и искал SDK, но все еще не могу найти API, который позволяет это.

Как отключить Bluetooth-устройство?

Ответы [ 4 ]

11 голосов
/ 09 июня 2011

Вот как вы отключаете / удаляете привязанное устройство, вызывая этот метод, где macAddress - это строка mac-адреса устройства. Т.е. "00: 02: 00: A3: 03: 05"

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

Чтобы получить объект IBluetooth, вам нужно выполнить пару шагов

  1. создать пакет в вашем проекте под названием android.bluetooth
  2. создать два файла, IBluetooth.aidl и IBluetoothCallback.aidl
  3. метод создания в ваших файлах, называемый 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);
    }
3 голосов
/ 14 ноября 2012

Другой способ:

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 голосов
/ 14 мая 2018

вы можете отправить пользователю настройки Bluetooth, тем самым вы можете отключить устройства, которые сопряжены. Intent intentOpenBluetoothSettings = new Intent ();intentOpenBluetoothSettings.setAction (android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);startActivity (intentOpenBluetoothSettings); `

0 голосов
/ 31 мая 2011

Возможно отключить устройство вручную через droid java.

Вы можете вызвать скрытый метод, чтобы удалить связь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...