Подтвердить что ты не робот

Как обнаружить изменение состояния Bluetooth с помощью широковещательного приемника?

Я пытаюсь сделать приложение, которое показывает тост, когда Bluetooth устройства включен. Я хочу сделать это, даже когда мое приложение не работает. Поэтому я должен использовать широковещательный приемник, добавить некоторые разрешения, фильтр намерений для манифеста android и создать класс java, но я не знаю деталей.

Что мне делать? Какие разрешения я должен использовать?

4b9b3361

Ответ 1

В отличие от разрешений, чтобы обнаружить изменение состояния bluetooth, вам нужно добавить это в свой AndroidManifest.xml.

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

Пример приемника будет выглядеть следующим образом: вы добавляете этот код туда, где хотите обрабатывать широковещательную передачу, например, активность:

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
            public void onReceive (Context context, Intent intent) {
                String action = intent.getAction();

                if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
                    if(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) 
    == BluetoothAdapter.STATE_OFF)
    // Bluetooth is disconnected, do handling here
}

}

        };

Чтобы использовать ресивер, вам необходимо его зарегистрировать. Что вы можете сделать следующим образом. Я регистрирую ресивер в своей основной деятельности.

registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));

Вы также можете добавить все его в свой AndroidManifest.xml. Таким образом, вы можете сделать специальный класс для приемника и обработать его там. Не нужно регистрировать приемник, просто введите класс и добавьте приведенный ниже код в AndroidManifest

<receiver
        android:name=".packagename.NameOfBroadcastReceiverClass"
        android:enabled="true">
    <intent-filter>
        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
    </intent-filter>
</receiver>

Ответ 2

Вы должны принять следующие разрешения.

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

и вы должны записать это как фильтр намерений в теге приемника.

<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />

Ответ 3

К сожалению, для приложений, ориентированных на API 26 или выше, заявленные приемники широковещательной рассылки манифеста больше не работают (ссылка здесь: https://developer.android.com/guide/components/broadcast-exceptions), за некоторыми исключениями. android.bluetooth.adapter.action.STATE_CHANGED отсутствует в этом списке.

Для bluetooth вы можете прослушивать только изменения:

ACTION_CONNECTION_STATE_CHANGED, ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED