Привет всем!
Начал программировать через 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 отображаются