Callback на подключение любого bluetooth девайса

198
11 апреля 2018, 09:57

Как я могу в активити повесить callback на подключение любого девайса? Т.е. что-бы мне пришло оповещение, НЕ что есть доступные устройства bluetooth, а ловить события что вот подключился девайс или отключился.

Я пытался сделать через BluetoothGattCallback:

onCreate

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(this.BLUETOOTH_SERVICE);
    BluetoothAdapter mBluetoothAdapter = mBluetoothManager.getAdapter();
    //mBluetoothAdapter.getAddress() обрати внимание, сюда нужно передать адрес конкретного девайса вроедю Не работает так как у меня
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mBluetoothAdapter.getAddress());
    BluetoothGatt bluetoothGatt = device.connectGatt(this, false, bluetoothCallback);

BluetoothGattCallback

private BluetoothGattCallback bluetoothCallback =
        new BluetoothGattCallback() {
            @Override
            public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
                if (newState == BluetoothProfile.STATE_CONNECTED) {
                    Log().d("ROMA", "new BT device Connected");
                } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                    Log().d("ROMA", "BT device disconnected");
                }
            }
         };
Answer 1

Для это потребуется создать свой BroadcastReceiver

1) В манифесте укажите следующие разрешения:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
<uses-permission android:name="android.permission.BLUETOOTH"/>

2) Опишите свой BroadcastReceiver, который будет ловить события подключения/отключения девайсов:

public class BluetoothDevicesReceiver extends BroadcastReceiver {
    public BluetoothDevicesReceiver() {}
    @Override
    public void onReceive(Context context, Intent intent){
        if(BluetoothDevice.ACTION_ACL_CONNECTED.equals(intent.getAction()){
            // Что-то подключилось
        } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(intent.getAction()){
            // Что-то отключилось
        }
    }
}

3) Зарегистрируйте свой BroadcastReceiver в манифесте в секции application:

<receiver
   android:name="Название вашего BroadcastReceiver"
   android:enabled="true"
   android:exported="false">
   <intent-filter>
      <action android:name="android.bluetooth.adapter.action.ACL_CONNECTED/>
      <action android:name="android.bluetooth.adapter.action.ACL_DISCONNECTED/>
   </intent-filter>
</receiver>
READ ALSO
Как конвертировать Long EpochDays в LocalDate?

Как конвертировать Long EpochDays в LocalDate?

Для расчётов мне требовалось перевести LocalDate в epochDays, теперь надо обратноПока сделал вот такую конструкцию:

192
Обновить Last_insert_id() если уже есть поле

Обновить Last_insert_id() если уже есть поле

Нужно проверить есть ли в таблице поле с заданной датой,если нет,то создать, если есть - положить в last_insert_id() id существующего поляПытался сделать...

197