2013-10-28 2 views
1

Как отключиться от устройства сразу после установления соединения? Мне нужно, чтобы предотвратить мое устройство от обмена данными с устройствами блокированныхКак предотвратить обмен данными через Bluetooth на Android

public class BluetoothReceiver extends BroadcastReceiver { 
    if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) { 
     BluetoothDevice remoteDevice = (BluetoothDevice) intent.getExtras().get(BluetoothDevice.EXTRA_DEVICE); 
     // I'd like to disconnect from remoteDevice here 
    } 
} 

AndroidManifest.xml

<receiver android:name="com.app.receivers.BluetoothReceiver" > 
    <intent-filter> 
     <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> 
    </intent-filter> 
</receiver> 

ответ

1

Я нашел следующее решение.

ACTION_UUID отправляется во время сопряжения и попытки передачи файлов, и я могу получить устройство из-за EXTRA_DEVICE. Если я хочу, чтобы немедленно отключиться от этого устройства, я могу запустить removeBond

private void removeBond(BluetoothDevice device) { 
    try { 
     Method m = device.getClass().getMethod("removeBond", (Class[]) null); 
     m.invoke(device, (Object[]) null); 
    } catch (Exception e) { 
     Log.e("TAG", "Failed to disconnect from the device"); 
    } 
} 

Это не совсем разъединение.

Обновление № 1.

Иногда removeBond называется, но устройство я подключился к получает непарный после файл был отправлен/получен. Таким образом, единственный способ предотвратить устройство от обмена данными через Bluetooth теперь я знаю, чтобы отключить его модуль Bluetooth, вызвав BluetoothAdapter.getDefaultAdapter().disable()

if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) { 
     BluetoothDevice remoteDevice = (BluetoothDevice) intent.getExtras().get(BluetoothDevice.EXTRA_DEVICE); 
    if (isBlackListed(remoteDevice)) { 
     BluetoothAdapter.getDefaultAdapter().disable(); 
    } 
} 

Преимущества

  • Надежность

Недостатки

  • Гарнитура перестает работать
-1
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { 
     @Override 
     public void onConnectionStateChange(BluetoothGatt gatt, int status, 
       int newState) { 
      // TODO Auto-generated method stub 
      String intentAction; 
      if(newState == BluetoothProfile.STATE_CONNECTED) { 
       intentAction = ACTION_GATT_CONNECTED; 
       mConnectionState = STATE_CONNECTED; 
       broadcastUpdate(intentAction); 
       Log.i(TAG, "Attempting to start service discovery:" + mBluetoothGatt.discoverServices()); 

      } else if(newState == BluetoothProfile.STATE_DISCONNECTED) { 
       intentAction = ACTION_GATT_DISCONNECTED; 
       mConnectionState = STATE_DISCONNECTED; 
       Log.i(TAG, "Disconnected from GATT server"); 
       broadcastUpdate(intentAction); 
      } 
     } 
} 

после определения mBluetoothGatt, и вы можете вызвать следующий код после нажать или любой операции:

mBluetoothGatt.disconnect(); 
+0

Существует такой метод, называемый 'disconnect()' в 'BluetoothGattCallback'. http://developer.android.com/reference/android/bluetooth/BluetoothGattCallback.html. И ваш код о [Bluetooth Low Energy] (http://developer.android.com/guide/topics/connectivity/bluetooth-le.html); мой вопрос заключался в отключении от обычного устройства, такого как планшет, телефон и т. д. –

Смежные вопросы