Запрос сопряжения Bluetooth на панели уведомлений?

Привет всем!

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

Например: Я инициирую свой запрос на сопряжение с встроенного устройства, а затем появляется уведомление, такое как:

In english: Pairing request for Bluetooth

И иногда мне не нужно беспокоиться об уведомлении, мой диалог просто появляется, как я и предполагал.

Pairing dialog shows up and there was no notification on the status bar

Есть ли способ поймать это уведомление и отобразить диалоговое окно или это ошибка в моем коде при инициализации соединения Bluetooth?

EDIT:

ОБНОВЛЕНИЕ 1:

Проверено ответ, который дал мне Рено, и это на самом деле зависит от множества вещей. Существуют другие способы отображения диалога напрямую. Вызывается следующий метод при поступлении запроса на спаривание. Проверка выполняется, чтобы увидеть, должно ли диалог отображаться на переднем плане (true) или как уведомление (false):

public boolean shouldShowDialogInForeground(String deviceAddress) {
    // If Bluetooth Settings is visible
    if (mForegroundActivity != null) return true;

    long currentTimeMillis = System.currentTimeMillis();
    SharedPreferences sharedPreferences = getSharedPreferences();

    // If the device was in discoverABLE mode recently
    long lastDiscoverableEndTime = sharedPreferences.getLong(
            BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0);
    if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND)
            > currentTimeMillis) {
        return true;
    }

    // If the device was discoverING recently
    if (mAdapter != null && mAdapter.isDiscovering()) {
        return true;
    } else if ((sharedPreferences.getLong(SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP, 0) +
            GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) > currentTimeMillis) {
        return true;
    }

    // If the device was picked in the device picker recently
    if (deviceAddress != null) {
        String lastSelectedDevice = sharedPreferences.getString(
                SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE, null);

        if (deviceAddress.equals(lastSelectedDevice)) {
            long lastDeviceSelectedTime = sharedPreferences.getLong(
                    SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE_TIME, 0);
            if ((lastDeviceSelectedTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND)
                    > currentTimeMillis) {
                return true;
            }
        }
    }
    return false;
}

Это фрагмент исходного кода, и вы можете видеть, что есть способы сделать диалог:

  • Если устройство недавно находилось в режиме обнаружения
  • Если устройство недавно обнаружило
  • Если устройство недавно было выбрано в сборщике устройств
  • Если отображаются настройки Bluetooth

Ответ 1

По комментарий, который я увидел в исходном коде Android

BluetoothPairingRequest - это приемник для любого соединения Bluetooth запрос. Он проверяет, отображаются ли в настоящее время настройки Bluetooth и выводит PIN-код, ключ доступа или диалог ввода подтверждения. В противном случае он помещает уведомление в строку состояния, что может быть нажмите, чтобы открыть диалог ввода пары.

Итак, да, в зависимости от видимости БТ, будет показан диалог/уведомление.

ninja edit: 

Это может различаться в зависимости от используемого оборудования.

  • Если устройство недавно находилось в режиме обнаружения
  • Если устройство недавно обнаружило
  • Если устройство недавно было выбрано в сборщике устройств