Pero hay buenas noticias, la nueva Android 11 ¡finalmente trajo la versión final de Bubbles API!
Para evitar una especie de burbuja inundación de las aplicaciones y continúan interrumpiendo al usuario, las burbujas aparecen solo bajo ciertas circunstancias.
Si su aplicación se orienta Android 11 o superior, las notificaciones de globo aparecen solo si cumplen con los requisitos de conversación:
- Usos de la notificación
MessagingStyle
; - La notificación está asociada con un enlace de intercambio dinámico o en caché válido de larga duración;
- El usuario no degradó la conversación de la sección de conversación a través de la configuración del canal de notificación en el momento de la publicación.
En caso de que su aplicación se oriente Android 10, el globo de notificación simplemente aparece si se cumplen una o más de estas condiciones:
- Usos de la notificación
MessagingStyle
y tiene unPerson
adicional; - La notificación proviene de una llamada a
Service.startForeground
, tiene una categoría deCATEGORY_CALL
y tiene unPerson
adicional; - La aplicación está en la parte superior cuando se envía la notificación.
Si no se cumple ninguna de estas condiciones, se muestra la notificación en lugar de un albarán de entrega.
Antes de comenzar, si desea habilitar las burbujas en Android 10 debe ir a la configuración del desarrollador y habilitar la opción Bubbles
.
¡Vamos a empezar! 🏁
1. Actualiza tu build.gradle
Asegúrese de que su aplicación apunte a Android 11 (API nivel 30) y cambie el compileSDKVersion
.
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"defaultConfig {
targetSdkVersion 30
}
}
2. Crea una actividad para la burbuja.
La vista de burbuja expandida de una burbuja se crea a partir de una actividad y debe configurarse para mostrarse correctamente como una burbuja. Este negocio debería ser resizeableActivity
es embedded
. Si falta alguno de estos requisitos, se mostrará una notificación en su lugar.
<activity
android:name=".BubbleActivity"
android:allowEmbedded="true"
android:documentLaunchMode="always"
android:resizeableActivity="true" />
Necesitamos establecer el atributo documentLaunchMode="always"
explícitamente, de lo contrario, en dispositivos con Android 10, las notificaciones no aparecerán como burbujas. En Android 11 ya no es necesario porque el sistema configura automáticamente todas las conversaciones ‘ documentLaunchMode
para "always"
.
3. Crea una notificación
Para ‘crear’ una burbuja debes:
- Cree una notificación regular como lo hace normalmente:
val builder = Notification.Builder(context, CHANNEL_BUBBLE_ID)
- Luego crea un archivo
BubbleMetaData
objeto con unPerson
objeto y también unShortcutInfo
objeto que estará asociado a la factura:
//create the intent for the bubbleval target = Intent(context, BubbleActivity::class.java)
val bubbleIntent =
PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_UPDATE_CURRENT)//create bubble metadata val icon = Icon.createWithResource(context, R.drawable.icon)
val bubbleMetada = Notification.BubbleMetadata.Builder(bubbleIntent, icon)
.setDesiredHeightResId(R.dimen.bubble_height)
.build()//create the person information
val person = Person.Builder()
.setName("John Doe")
.setIcon(icon)
.setImportant(true)
.build()//Create a dynamic shortcut associated to the bubble
val shortcut = ShortcutInfo.Builder(context, "shortcutid")
.setLongLived(true)
.setIntent(
Intent(context, MainActivity::class.java)
)
.setShortLabel("John Doe Conversation")
.setIcon(icon)
.setPerson(person)
.build()// publish the new shortcut
shortcutManager.pushDynamicShortcut(shortcut)
- Finalmente, establezca
BubbleMetadata
asunto en la notificación, usando el métodosetBubbleMetadata
:
//set the bubble meta, messaging style, person and
//shortcut in the notification builderwith(builder) {
setBubbleMetadata(bubbleData)
style = Notification.MessagingStyle(person).addMessage(
Notification.MessagingStyle.Message(
simpleMessage.text,
System.currentTimeMillis(),
person
)
)
setShortcutId(shortcut.id)
addPerson(person)
}
- Establezca los valores normales para una notificación regular en el constructor, ya que el usuario puede desactivar las burbujas en la configuración del sistema y cuando esto suceda, se mostrará una notificación normal en lugar de una burbuja:
with(builder) {
setContentTitle("New message")
setSmallIcon(R.drawable.ic_stat_notification)
setCategory(Notification.CATEGORY_MESSAGE)
setContentIntent(
PendingIntent.getActivity(
context,
0,
Intent(context, MainActivity::class.java),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
setShowWhen(true)
}//then just call the notification manager to send it
notificationManager.notify(MY_NOTIFICATION, builder.build())
Nota: La primera vez que envía la notificación para ver un cómic, el canal de notificación debe tener la importancia establecida con IMPORTANCE_MIN
o mas alto.
En caso de que su aplicación esté en el primer piso, se ignora la importancia y su burbuja siempre se mostrará (a menos que el usuario haya bloqueado las burbujas / notificaciones).
Si desea ver más detalles, consulte el repositorio de GitHub: