Sugerencia rápida crear un mosaico de configuraciones rápidas personalizadas para Android

El panel de configuración rápida no necesita introducción para los usuarios de Android. Usan los interruptores que ofrece todo el tiempo para activar y desactivar servicios como WiFi, Bluetooth y GPS. A lo largo de los años, ha crecido y mejorado tanto que rara vez es necesario abrir el Ajustes aplicación en estos días.

Hasta hace poco, el panel de configuración rápida estaba bloqueado y los usuarios tenían que estar satisfechos con una colección grande, pero fija de interruptores, comúnmente conocidos como mosaicos. Sin embargo, con el lanzamiento de Android Nougat, ese ya no es el caso. Los usuarios ahora son libres de agregar, eliminar y reorganizar mosaicos. Además, como desarrollador de aplicaciones, puede ofrecer sus propios mosaicos personalizados..

En esta sugerencia rápida, te mostraré cómo usar la API de mosaico de configuración rápida para crear un mosaico personalizado desde cero.

Prerrequisitos

Antes de continuar, asegúrese de tener lo siguiente:

  • La última versión de Android Studio
  • un teléfono con Android Nougat o superior 

1. Entendiendo los azulejos

En esencia, los mosaicos son solo interruptores de fácil acceso que los usuarios pueden presionar en cualquier momento, incluso cuando sus dispositivos están bloqueados. Debido a que no pueden mostrar nada más que un ícono y una etiqueta, solo pueden usarse para acciones muy específicas pero simples.

Cada baldosa tiene un estado asociado a ella. Al igual que un interruptor del mundo real, puede estar en un estado "encendido" o en un estado "apagado". Como es de esperar, una baldosa que está encendida es más brillante que una que está apagada. Aunque debe administrar el estado de su mosaico, la plataforma Android administra automáticamente su brillo.

2. Creando un mosaico personalizado

Para poder ofrecer un mosaico personalizado, su aplicación debe tener un servicio que extienda el TileService clase.

clase MyTileService: TileService () 

Al mencionar el servicio en el manifiesto del proyecto, debe asignarle una etiqueta y un icono, los cuales se utilizarán para crear el aspecto predeterminado del mosaico. Para darle un ejemplo realista, ahora estaremos creando un mosaico que hace que el dispositivo del usuario vibre continuamente mientras esté encendido. Su etiqueta será Temblar, y su icono será vibración, disponible en Vector Asset Studio bajo el Notificación sección.

A continuación, debe agregar un filtro de intento a la definición del servicio para que pueda responder a la android.service.quicksettings.action.QS_TILE acción. Para asegurarse de que solo puede ser lanzado por el sistema Android, también debe protegerlo con android.permission.BIND_QUICK_SETTINGS_TILE permiso.

En este punto, la definición del servicio debería verse así:

    

Ese es todo el código que necesitas para mostrar un mosaico personalizado. Si implementa su aplicación ahora y navega a la Editar En la sección del panel de configuración rápida, debería poder ver su ficha en la lista de fichas disponibles..


Arrástrelo y suéltelo cerca de uno de los mosaicos predeterminados para que pueda acceder a él más fácilmente..

3. Inicializando el mosaico

Debes haber notado que nuestro azulejo es bastante brillante. Eso es porque todavía no hemos inicializado su estado, y el sistema cree que está "encendido". Para cambiar el mosaico de modo que se inicie en el estado apagado cuando el usuario lo agregue, puede anular el onTileAdded () controlador de eventos del servicio y establecer la estado propiedad de la qstile oponerse a Tile.STATE_INACTIVE.

Siempre que cambie el estado, recuerde también llamar al updateTile () Método para que el aspecto de la baldosa cambie para coincidir con el estado.

anular fun onTileAdded () super.onTileAdded () // Actualizar estado qsTile.state = Tile.STATE_INACTIVE // Apariencia de actualización qsTile.updateTile ()

Si ejecuta la aplicación ahora, elimine el mosaico y vuelva a agregarlo, debería ver que está apagado..

4. Agregar un controlador de clic

En este momento, no pasa nada cuando haces clic en el azulejo. Puedes cambiar eso anulando la al hacer clic() manejador de eventos del servicio.

Dentro del controlador de eventos, puede activar y desactivar el mosaico alternando entre los Tile.STATE_ACTIVE y Tile.STATE_INACTIVE estados El siguiente código le muestra cómo hacerlo con un simple si-si no declaración:

anular fun onClick () super.onClick () if (qsTile.state == Tile.STATE_INACTIVE) // Activar qsTile.state = Tile.STATE_ACTIVE startVibrating () // TODO else // Desactivar qsTile.state = Tile.STATE_INACTIVE stopVibrating () // TODO // Looks qsTile.updateTile ()

5. Usando el vibrador

La acción asociada con el mosaico debe comenzar tan pronto como se enciende el azulejo y detenerse tan pronto como se apaga. Por lo tanto, además de actualizar el estado, el código que agregamos en el paso anterior contiene llamadas al startVibrating () y detener vibración () metodos.

los startVibrating () método puede utilizar el vibrar() método de android Vibrador Clase para hacer vibrar el teléfono. los vibrar() El método, sin embargo, espera una duración fija. Para asegurarse de que el teléfono vibre continuamente mientras el mosaico esté encendido, puede llamarlo dentro de un bucle, preferiblemente con una duración corta. Dicho bucle no se puede ejecutar dentro del hilo de la interfaz de usuario, el hilo que el servicio de mosaico usa para su controlador de eventos de clic.

Idealmente, cualquier operación de larga duración en la que desee que comience o se detenga el servicio de baldosas debe colocarse dentro de un Servicio de Intención ejemplo. Para mantener este tutorial corto, sin embargo, vamos a hacer con una coroutine por ahora.

El siguiente código le muestra cómo ejecutar el bucle dentro de una coroutine creada usando el lanzamiento() constructor de coroutina:

fun startVibrating () launch while (qsTile.state == Tile.STATE_ACTIVE) (getSystemService (Context.VIBRATOR_SERVICE) como Vibrator) .vibrate (1000) // Vibrate por un segundo // Espere un segundo antes de volver a vibrar (1000)

Aunque el bucle anterior terminará cuando el usuario apague el mosaico, las vibraciones pueden durar un segundo extra. Para detenerlos inmediatamente, puede llamar al cancelar() método de la Vibrador servicio dentro del detener vibración () método.

fun stopVibrating () (getSystemService (Context.VIBRATOR_SERVICE) como Vibrador) .cancel ()

Nuestra baldosa personalizada está lista. Sin embargo, no funcionará a menos que tenga permiso para usar el vibrador del teléfono. Puede solicitarlo agregando la siguiente línea al archivo de manifiesto de su proyecto:

Si implementa la aplicación ahora y hace clic en el mosaico personalizado, su teléfono debería comenzar a vibrar. Al hacer clic en él nuevamente, debería poder detener las vibraciones inmediatamente.

Conclusión

Si está creando una aplicación que ofrece una funcionalidad única o información a la que los usuarios necesitarán acceder con mucha frecuencia, ofrecer un mosaico personalizado puede mejorar dramáticamente la experiencia del usuario. En este tutorial, vio lo fácil que es crear un mosaico de este tipo utilizando la API de mosaico de configuración rápida.

Para obtener más información al respecto, consulte la documentación oficial..

Y mientras estés aquí, echa un vistazo a algunas de nuestras otras publicaciones sobre el desarrollo de aplicaciones para Android!