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

Всем привет!

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

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

In english: Pairing request for Bluetooth

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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;
}

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

  1. Если устройство недавно находилось в режиме обнаружения
  2. Если устройство обнаруживалось недавно
  3. Если устройство недавно было выбрано в средстве выбора устройств
  4. Если отображаются настройки Bluetooth
12
задан Mazze 28 July 2011 в 10:57
поделиться