Всем привет!
Некоторое время назад начал программировать с помощью Bluetooth на Android. Но теперь я столкнулся с некоторыми проблемами. Мне интересно, почему запрос на сопряжение иногда отображается в панели уведомлений, а иногда его пропускают, и диалоговое окно отображается напрямую.
Например: я инициирую свой запрос на сопряжение со встроенного устройства, а затем появляется уведомление, подобное этому:
И иногда мне не нужно беспокоиться об уведомлении, мое диалоговое окно просто отображается так, как я задумал.
Есть ли способ поймать это уведомление и отобразить диалоговое окно, или это ошибка в моем коде, когда я инициирую сопряжение по Bluetooth?
ИЗМЕНИТЬ:
ОБНОВЛЕНИЕ 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