Características de Android Q: ¿Qué hay de nuevo en la pantalla y debajo del capó?

Android Q: es el décimo lanzamiento principal y la versión 17 del sistema operativo móvil Android. La primera Beta de Android Q se lanzó el 13 de marzo de 2019, hoy ya tenemos la cuarta versión para probar. Sin embargo, aún ocurren momentos desagradables como fallas en el lanzador, problemas con la cámara o fallas en el proceso de la interfaz de usuario del sistema en caso de que el teléfono se desbloquee con un sensor de huellas dactilares.

De todos modos, los lanzamientos 5 y 6 de Google Android Q Beta están planeados para julio y aproximadamente para fines del trimestre se espera un lanzamiento estable. Veamos qué cambios significativos e interesantes van a tener lugar y qué innovaciones deberían esperar los usuarios y los desarrolladores en la nueva versión de Android. Supongo que sería mejor dividir los cambios relacionados con la interfaz de usuario y los del enfoque de programación.

¿Qué ha cambiado en la pantalla?

  1. En la última versión de Android, los desarrolladores han recibido la oportunidad de reflejar la configuración de la interfaz de comunicación directamente en la aplicación sin salir de ella. Ya no será necesario abrir la configuración del sistema como una actividad separada. Por cierto, ahora se parece aún más a BottomSheet, que permite encender Internet móvil o Bluetooth o conectarse a WiFi.

El desarrollador también recibe acceso temporal a la configuración NFC, el volumen y la conectividad WiFi por separado. Para llamar a la configuración, el usuario debe hacer una intención y definir qué se debe ajustar exactamente.

Parámetros posibles: ACTION_INTERNET_CONNECTIVITY / ACTION_WIFI / ACTION_NFC

val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivityForResult(panelIntent, CONNECTIVITY_REQUEST_CODE)
  1. Las funciones para compartir contenido también se han ampliado. DirectShare API permite ahora no solo agregar el contenido a la vista previa, sino también indicar una determinada categoría de aplicaciones o usuarios con los que compartir este contenido.

A continuación puede ver un ejemplo de uso simple.

private fun shareContent(imageUrl: Uri? = null) {
   if (imageUrl == null) {
       imagePicker?.choosePicture(false)
   } else {
       val sharingIntent = Intent(Intent.ACTION_SEND)
       sharingIntent.type = "text/plain"
       sharingIntent.putExtra(Intent.EXTRA_TITLE, "Send message")
       sharingIntent.putExtra(Intent.EXTRA_TEXT, "Hello!")
 
       // (Optional) if you want a preview thumbnail, create a content URI and add it
       // The system only supports content URIs
       val thumbnail = getClipDataThumbnail(imageUrl)
       if (thumbnail != null) {
           sharingIntent.clipData = thumbnail
           sharingIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
       }
 
       startActivity(Intent.createChooser(sharingIntent, null))
   }
}
 
private fun getClipDataThumbnail(imageUri: Uri): ClipData? {
   return try {
       ClipData.newUri(
           contentResolver,
           null,
           imageUri
       )
   } catch (e: FileNotFoundException) {
       e.printStackTrace()
       null
   } catch (e: IOException) {
       e.printStackTrace()
       null
   }
}

Un identificador único para el archivo multimedia se representa como un parámetro de la función shareContent. Puede elegir cualquier selector de archivos, pero es esencial que uno de los parámetros que devuelva sea Uri.

  1. Se agregó una función de ventanas flotantes en forma de burbuja. Es exactamente como en el mensajero de Facebook. Ahora no tienes que crear algo desde cero o golpearte la cabeza con algo, en la actualidad, es una solución de caja. Además, existen varios tipos de burbujas: las simples, que aparecen en pantalla y las que se abren automáticamente.

Para recibir tal resultado, debemos agregar parámetros en el manifiesto para declarar la actividad, que se abrirá al hacer clic en la burbuja

<activity
   android:name=".bubbles.BubbleActivity"
   android:allowEmbedded="true"
   android:documentLaunchMode="always"
   android:resizeableActivity="true" />

y pase PendingIntent a los metadatos de la notificación.

private fun createNotificationChannel() {
   // Create the NotificationChannel, but only on API 26+ because
   // the NotificationChannel class is new and not in the support library
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       val name = "BubbleBot"
       val importance = NotificationManager.IMPORTANCE_HIGH
       val channel = NotificationChannel(NOTIFICATION_CHANNEL_ID, name, importance)
       // Register the channel with the system; you can't change the importance
       // or other notification behaviors after this
       val notificationManager = getSystemService(NotificationManager::class.java)
       notificationManager?.createNotificationChannel(channel)
   }
}
@TargetApi(Build.VERSION_CODES.Q)
private fun showBubble() {
   val target = Intent(this, BubbleActivity::class.java)
   val bubbleIntent = PendingIntent.getActivity(this, 0, target, 0)
 
   // Create bubble metadata
   val bubbleData = Notification.BubbleMetadata.Builder()
       .setDesiredHeight(600)
       .setIcon(Icon.createWithResource(this, R.drawable.ic_launcher_foreground))
       .setIntent(bubbleIntent)
       .build()
 
   val chatBot = Person.Builder()
       .setBot(true)
       .setName("BubbleBot")
       .setImportant(true)
       .build()
 
   val notification = Notification.Builder(this, NOTIFICATION_CHANNEL_ID)
       .setContentIntent(bubbleIntent)
       .setSmallIcon(R.drawable.ic_launcher_foreground)
       .setBubbleMetadata(bubbleData)
       .addPerson(chatBot)
       .build()
 
   val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
   notificationManager.notify(1, notification)
}

A través de los metadatos, también se puede configurar la visualización de la burbuja y la ventana que se abrirá. Por ejemplo, pasamos por encima de la altura de la ventana y el icono de la burbuja. Además de los metadatos, tenemos la oportunidad de pasar información útil, por ejemplo, mensajes recibidos a través de notificaciones.

  1. La solicitud de acceso de geolocalización también ha sufrido algunos cambios. El usuario ahora puede definir el modo de su uso: la aplicación puede usar la geolocalización solo cuando se inicia o constantemente. En otras palabras, el usuario ahora puede definir si la aplicación debe usar las coordenadas del dispositivo cuando está inactiva.
@TargetApi(Build.VERSION_CODES.Q)
private fun checkBackgroundLocalePermission() {
   val permissionAccessCoarseLocationApproved = ActivityCompat
       .checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) ==
       PackageManager.PERMISSION_GRANTED
 
   if (permissionAccessCoarseLocationApproved) {
       val backgroundLocationPermissionApproved = ActivityCompat
           .checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) ==
           PackageManager.PERMISSION_GRANTED
 
       if (backgroundLocationPermissionApproved) {
           Toast.makeText(this, "Location enable", Toast.LENGTH_SHORT).show()
       } else {
           ActivityCompat.requestPermissions(this,
               arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
               LOCALE_REQUEST_CODE
           )
       }
   } else {
       ActivityCompat.requestPermissions(this,
           arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,
               Manifest.permission.ACCESS_BACKGROUND_LOCATION),
           LOCALE_REQUEST_CODE
       )
   }
}

¿Qué ha cambiado bajo el capó?

  1. En primer lugar, la mayoría de los cambios se refieren al soporte de pantallas adicionales y plegables. Exactamente así, a partir de ahora Android admitirá las pantallas desplegables de la caja. Como ya hemos mencionado anteriormente, el manifiesto ha recibido una nueva directiva android:resizeableActivity=”true”.

En tal caso, cuando se despliega la pantalla de un teléfono inteligente, se llamará a onConfigurationChanged con los nuevos parámetros y la actividad se extenderá automáticamente a toda la pantalla.

Por cierto, los documentos oficiales dicen que si no indica en el manifiesto que la actividad puede cambiar su alcance, la nueva parte de la pantalla se verá como una pantalla adicional. Luego, un usuario podrá iniciar una aplicación más en él.

El ciclo de vida de las actividades también ha experimentado alteraciones. Se agregó una nueva devolución de llamada onTopResumedActivityChanged. Es causado por la necesidad de ejecutar 2 aplicaciones en pantallas separadas a veces. Sin embargo, solo una aplicación tiene foco, al recibir un foco de otra aplicación, se llamará a esta devolución de llamada.

  1. Es importante mencionar una gran cantidad de cambios en los paquetes, las bibliotecas internas y el principio de funcionamiento de APT. El formato dex2oat, por ejemplo, ya no será compatible.

Para obtener información más detallada sobre la actualización de Android q y las nuevas funciones, puede ver el Vista previa de la pàgina.

Publicado originalmente en Stfalcon.com.

Similar Posts

Leave a Reply

Your email address will not be published.