Всем привет!
Некоторое время назад начал программировать с помощью Bluetooth на Android. Но теперь я столкнулся с некоторыми проблемами. Мне интересно, почему запрос на сопряжение иногда отображается в панели уведомлений, а иногда его пропускают, и диалоговое окно отображается напрямую.
Например: Я инициирую свой запрос на сопряжение со встроенного устройства, а затем появляется уведомление, подобное этому:
И иногда мне не нужно беспокоиться об уведомлении, мой диалог просто отображается так, как я задумал.
Есть ли способ поймать это уведомление и отобразить диалоговое окно, или это ошибка в моем коде, когда я инициирую соединение по 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;
}
Это фрагмент из исходного кода, и, как вы можете видеть, есть способы сделать в диалоговом окне отображается: