Как отключить Bluetooth-устройство с помощью Android 2.1 SDK
В Android 2.1, чтобы отсоединить устройство Bluetooth, вы можете перейти в настройки Bluetooth, нажать и удерживать устройство, а затем выбрать "Отключить", чтобы отсоединить это устройство. Я хочу быть в состоянии сделать это из моего приложения. Я могу получить список сопряженных / связанных устройств с помощью BluetoothAdapter.getBondedDevices (), но не могу найти, как отключить пару. Я исследовал образец BluetoothChat, и я искал SDK, но все еще не могу найти API, который позволяет это.
Как я могу отключить устройство Bluetooth?
4 ответа
Вот как вы отключаете / удаляете привязанное устройство, вызывая этот метод, где macAddress - это строка mac-адреса устройства.ie "00:02:00:A3:03:05"
IBluetooth ib =getIBluetooth();
ib.removeBond(macAddress);
Чтобы получить объект IBluetooth, вам нужно пройти пару шагов
- создать пакет в вашем проекте под названием android.bluetooth
- создайте два файла, IBluetooth.aidl и IBluetoothCallback.aidl
создать метод в ваших файлах с именем 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);
}
}
Вы можете отправить пользователю настройку Bluetooth, тем самым вы можете отключить устройства, которые сопряжены. Intent intentOpenBluetoothSettings = new Intent(); intentOpenBluetoothSettings.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); startActivity(intentOpenBluetoothSettings);`
Можно отключить устройство вручную через droid java.
Вы можете вызвать скрытый метод, чтобы удалить связь.