¡Hola a todos!Solicitud de sincronización Bluetooth en la barra de notificaciones?
Comenzó a programar con Bluetooth en Android hace un rato. Pero ahora me he encontrado con algunos problemas. Me pregunto por qué la solicitud de emparejamiento a veces aparece en la barra de notificaciones y, a veces, esto se omite y el cuadro de diálogo se muestra directamente.
Por ejemplo: Me iniciado mi solicitud de vinculación de un dispositivo embebido y luego hay una notificación como este:
Y a veces no tengo que preocuparse de la notificación, mi diálogo simplemente aparece como quería que fuera.
¿Hay manera de coger la notificación y mostrar el cuadro de diálogo o se trata de un error en mi código cuando iniciar el emparejamiento Bluetooth?
EDIT:
ACTUALIZACIÓN 1:
marchamos la respuesta Reno me dio y que en realidad depende de una variedad de cosas. Hay otros medios para mostrar el diálogo directamente. Se llama al siguiente método cuando llega la solicitud de emparejamiento. Se realiza una comprobación para ver si el diálogo debe aparecer en primer plano (true) o como una notificación (falso):
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;
}
Este es un fragmento del código fuente y como se puede ver que hay maneras de hacer el espectáculo de diálogo:
- Si el dispositivo estaba en modo de detección recientemente
- Si el dispositivo estaba descubriendo recientemente
- Si el dispositivo fue recogido en el selector de dispositivo recientemente
- Si la configuración de Bluetooth es visible
Wow gracias Reno. Esto realmente debería ser explicado en el desarrollador. docs! Así que debería ponerlo al frente, supongo o hacerlo algo visible, lo probaré, pero si conoce la respuesta, puede compartirlo :) – Mazze
Estoy hablando de la visibilidad de BT, debe enviar un ACTION_REQUEST_DISCOVERABLE intento para solicitar que el dispositivo sea visible para que otros dispositivos puedan encontrarlo. – Reno
De hecho, hago eso, pero ejecuto 'cancelDiscovery()' cuando se descubre el dispositivo. En este [enlace] (http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices) En "Descubrir dispositivos" puede ver que uno debe ejecutar 'cancelDiscovery()' una vez que se descubre el dispositivo ... ¿derecho? – Mazze