¿Solicitud de sincronización de Bluetooth en la barra de notificación?

¡Hola a todos!

Comenzó a programar con Bluetooth en Android hace un tiempo. Pero ahora he encontrado algunos problemas. Me pregunto por qué la solicitud de emparejamiento a veces aparece en la barra de notificación ya veces esto se omite y el diálogo se muestra directamente.

Por ejemplo: Inicie mi solicitud de emparejamiento desde un dispositivo incrustado y luego hay una notificación como esta:

Solicitud de emparejamiento para Bluetooth

Y a veces no tengo que molestarme con la notificación, mi diálogo sólo se muestra como yo pretendía que sea.

Aparece el cuadro de diálogo de emparejamiento y no hay ninguna notificación en la barra de estado

¿Hay manera de coger esa notificación y de exhibir el diálogo o es esto un error en mi código cuando comienzo el emparejamiento del bluetooth?

EDITAR:

ACTUALIZACIÓN 1:

Revisado la respuesta que Reno me dio y en realidad depende de una variedad de cosas. Hay otros medios de mostrar el diálogo directamente. El método siguiente se llama cuando llega la solicitud de emparejamiento. Se realiza una comprobación para ver si el diálogo debe aparecer en primer plano (verdadero) o como notificación (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; } 

Este es un fragmento del código fuente y como se puede ver que hay maneras de hacer que se muestre el diálogo:

  1. Si el dispositivo estaba en modo detectable recientemente
  2. Si el dispositivo estaba descubriendo recientemente
  3. Si el dispositivo fue recogido recientemente en el selector de dispositivos
  4. Si la configuración de Bluetooth está visible

Según un comentario que vi en el código fuente de Android

BluetoothPairingRequest es un receptor para cualquier solicitud de emparejamiento de Bluetooth. Comprueba si los ajustes de Bluetooth están actualmente visibles y muestra el PIN, la clave de acceso o un diálogo de entrada de confirmación. De lo contrario, coloca una notificación en la barra de estado, que se puede hacer clic para abrir el diálogo de entrada de emparejamiento.

Así que sí, dependiendo de la visibilidad de BT, se mostrará el diálogo / notificación.

 ninja edit: 

Esto puede variar dependiendo del hardware utilizado.

  • Si el dispositivo estaba en el modo discoverABLE recientemente
  • Si el dispositivo estaba descubriendo recientemente
  • Si el dispositivo fue recogido recientemente en el selector de dispositivos
  • La celebración de la conexión Bluetooth bluetooth a través de múltiples actividades
  • Android BLE API: GATT Notificación no recibida
  • ¿Cómo mejorar la medición de la distancia Bluetooth mediante RSSI?
  • Android 4.3 Bluetooth ble no se llama onCharacteristicRead ()
  • Android BLE Gatt timeout después de gatt.writeDescriptor ()
  • El dispositivo Android BLE recibe resultados extremadamente irregulares
  • JSR82 connect: No se ha creado la conexión al conector Bluetooth (fallado o abortado)
  • Android bluetooth socket.connect () falla
  • Problemas con Android Bluetooth LE Notificaciones
  • ¿Cómo funciona un obturador remoto para trabajar con la cámara en Android / iOS?
  • Android detectar Bluetooth desconectar inmediatamente Máximo 2 segundos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.