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