Cómo administrar accesos directos

Después de crear los accesos directos, es posible que debas administrarlos durante el ciclo de vida de tu app. Por ejemplo, es posible que desees optimizar tu app al determinar A menudo, los usuarios completan acciones específicas con tus atajos. En otro caso, puedes decidir inhabilitar un acceso directo fijo para evitar que tu app y realizan acciones desactualizadas o faltantes. Para los accesos directos a los que se hace referencia en conversaciones, te recomendamos hacer un seguimiento del uso para proporcionar indicadores que mejoren la clasificación de atajos.

En esta página, se describen estas y muchas otras formas comunes de administrar tus de acceso directo.

Comportamiento de los accesos directos

Las siguientes secciones contienen información general sobre el comportamiento de los accesos directos, incluida la visibilidad, el orden de visualización y las clasificaciones.

Visibilidad de los accesos directos

Los accesos directos estáticos y dinámicos aparecen en un selector compatible. cuando el usuario realiza un gesto o un comando por voz específicos. Activada selectores admitidos, el gesto es un toque y mantén presionado el ícono de selector de la app, pero el gesto puede ser diferente en otras apps de selector. Con Google Asistente, las combinaciones de teclas se pueden mostrar en el Asistente o se pueden iniciar desde un usuario comando por voz.

La clase LauncherApps proporciona APIs para que accedan las apps de selector. de acceso directo.

Como los accesos directos fijos aparecen en el selector, siempre son visibles. Solo en las siguientes situaciones se quita un acceso directo fijo del selector:

  • El usuario lo quita.
  • Se desinstaló la app asociada con el acceso directo.
  • El usuario borra los datos de una aplicación en Configuración > Aplicaciones y notificaciones, selecciona la app y presiona Almacenamiento > Libera espacio de almacenamiento.

Objetivos de uso compartido son un subconjunto de accesos directos dinámicos que aparecen en la fila de uso compartido directo de la Hoja para compartir de Android

Captura de pantalla de Android Sharesheet
Figura 1: Android Sharesheet Los objetivos de uso compartido directo aparecen en la primera fila, seguidos de las apps clasificadas y, por último, de la lista de apps.

Orden de visualización de los accesos directos

Cuando el selector muestra los accesos directos de una app, deben aparecer en las siguientes secciones: pedido:

  1. Atajos estáticos: atajos cuyo método isDeclaredInManifest() muestra true.
  2. Atajos dinámicos: Son aquellos cuyo ShortcutInfo.isDynamic() muestra true.

Dentro de cada tipo de atajo (estático y dinámico), estos se ordenan en aumentando la clasificación según ShortcutInfo.getRank. Asistente de Google también considera la clasificación de los accesos directos al determinar los accesos directos contextuales para mostrar a usuarios.

Las clasificaciones son números enteros secuenciales no negativos. Los atajos estáticos se clasifican desde el primero al último en el orden en que aparecen en tu archivo shortcuts.xml. Para recursos dinámicos accesos directos, puedes actualizar las clasificaciones de los accesos directos existentes cuando llames updateShortcuts(Context, List): addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat) o setDynamicShortcuts(Context, List).

El orden de los objetivos de uso compartido se basa en varios factores, incluidos los usuarios el historial, las visitas recientes, la frecuencia sugerencia de rango, el uso de la app y la prioridad establecida en la conversación asociada con un acceso directo de uso compartido. Compartir objetivos creados con el API de accesos directos de uso compartido tienen prioridad sobre los objetivos de uso compartido producidos por la ChooserTargetService que dejó de estar disponible en Android 11. En Android 12 y versiones posteriores, los objetivos de uso compartido generado por el ChooserTargetService obsoleto ya no aparecerán en el compartir la hoja de cálculo.

La mayoría de los selectores muestran un máximo de cuatro combinaciones de teclas. Para cualquier combinación de accesos directos estáticos y dinámicos definidos, el selector muestra una dos accesos directos estáticos y dos dinámicos. Por ejemplo, si definir cuatro accesos directos estáticos y crear de forma programática tres combinaciones de teclas accesos directos, el selector muestra los dos primeros accesos directos estáticos y los dos y los más calificados.

Cómo administrar varios intents y actividades

Si deseas que tu app realice varias operaciones cuando el usuario active un puedes configurarlo para que active actividades sucesivas. Puedes lograr esto asignando múltiples intents, iniciando una actividad desde o establecer marcas de intent, según el tipo de combinación de teclas.

Cómo asignar varios intents

Cuando crees un atajo con ShortcutInfoCompat.Builder, puedes usar setIntents() en lugar de setIntent(). Si llamas a setIntents(), puedes Puede iniciar varias actividades dentro de tu app cuando el usuario selecciona un acceso directo. Colocar todas las actividades de la lista en la pila de actividades, excepto la última. Si el botón el usuario presiona el botón Atrás del dispositivo, ve otra actividad en tu app en lugar de regresar al selector del dispositivo.

Cómo comenzar una actividad desde otra

Los accesos directos estáticos no pueden tener marcas de intents personalizados. El primer intent de una instancia la combinación de teclas siempre tiene Intent.FLAG_ACTIVITY_NEW_TASK Intent.FLAG_ACTIVITY_CLEAR_TASK establecida. Esto significa que cuando tu app esté en ejecución, todas las actividades existentes en la app se destruyen cuando se se inicie. Si no quieres este comportamiento, puedes usar un trampolín actividad (una actividad invisible que inicia otra actividad) de Activity.onCreate(Bundle) que llama a Activity.finish():

  1. En el archivo AndroidManifest.xml, incluye la asignación del atributo. android:taskAffinity=" en la actividad de trampolín.
  2. En el archivo de recursos de accesos directos, haz referencia a la actividad disparadora en la en el atajo estático.

Para obtener más información sobre las actividades disparadoras, consulta Cómo iniciar una actividad. de otra.

Cómo configurar marcas de intents

Puedes publicar accesos directos dinámicos con cualquier conjunto de marcas Intent. Preferentemente, especifica Intent.FLAG_ACTIVITY_CLEAR_TASK junto con tu otro marcas. De lo contrario, si intentas iniciar otra tarea mientras la app está en ejecución, es posible que la actividad objetivo no aparezca.

Para obtener más información sobre las tareas y las marcas de intents, consulta Tareas y la pila de actividades.

Cómo actualizar los accesos directos

Cada ícono de selector de la app puede contener, como máximo, varios elementos estáticos y dinámicos accesos directos combinados que sea igual al valor que devuelve getMaxShortcutCountPerActivity No hay un límite para la cantidad accesos directos fijos que una aplicación puede crear.

Cuando se fija un acceso directo dinámico, incluso si el publicador lo quita como elemento de acceso directo dinámico, el acceso directo fijo seguirá estando visible y se podrá iniciar. Esto permite una app tiene más de getMaxShortcutCountPerActivity() cantidad de accesos directos.

Considera el siguiente ejemplo, en el cual se supone que el valor devuelto por getMaxShortcutCountPerActivity() es 4:

  1. Una app de chat publica cuatro accesos directos dinámicos, que representan los cuatro más Conversaciones recientes: c1, c2, c3 y c4.
  2. El usuario fija los cuatro accesos directos.
  3. Luego, el usuario inicia tres conversaciones adicionales: c5, c6 y c7. El app del publicador vuelve a publicar sus accesos directos dinámicos. El nuevo atajo dinámico la lista es: c4, c5, c6 y c7.

La app debe quitar c1, c2 y c3 porque no puede mostrar más de cuatro los atajos dinámicos. Sin embargo, c1, c2 y c3 siguen siendo accesos directos fijos que la función el usuario pueda acceder e iniciar.

Luego, el usuario puede acceder a un total de siete accesos directos que vinculan a actividades de la app del publicador. Esto se debe a que el total incluye la cantidad máxima y los tres accesos directos fijos.

  1. La app puede usar updateShortcuts(Context, List) para actualizar cualquiera de los los siete atajos existentes. Por ejemplo, puedes actualizar este conjunto de atajos cuando las apps de chat los íconos cambian.
  2. Puedes usar addDynamicShortcuts(Context, List) y setDynamicShortcuts(Context, List) métodos para actualizar los accesos directos existentes con los mismos IDs. Sin embargo, no podrás usarlos para actualizar atributos accesos directos fijos, porque estos dos métodos intentan convertir las listas dadas de a accesos directos dinámicos.

No hay un límite para la cantidad de accesos directos que se pueden enviar para que se muestren en y apps de asistencia, como Asistente de Google. Usa la pushDynamicShortcut(). de la biblioteca ShortcutManagerCompat de Jetpack para crear y actualizar combinaciones de teclas para usar en las apps del Asistente. Además, agrega la integración de accesos directos de Google biblioteca a tu app para que los vínculos dinámicos sean aptos para aparecer en Google Asistente

Para obtener más información sobre los lineamientos para los accesos directos a aplicaciones, incluida su actualización, Consulta Prácticas recomendadas para combinaciones de teclas.

Cómo procesar los cambios de la configuración regional del sistema

Las apps deben actualizar los accesos directos dinámicos y fijos cuando reciben el Transmisión de Intent.ACTION_LOCALE_CHANGED que indica un cambio en el sistema configuración regional.

Cómo hacer un seguimiento del uso de los accesos directos

Para determinar las situaciones en las que aparecen los accesos directos estáticos y dinámicos, el selector examina el historial de activación de los accesos directos. En el caso de los atajos estáticos, Puedes hacer un seguimiento de cuándo los usuarios completan acciones específicas en tu app llamando al método reportShortcutUsed() y pasándole el ID de un de acceso directo cuando ocurre cualquiera de los siguientes eventos:

  • El usuario selecciona el acceso directo con el ID específico.
  • Dentro de la app, el usuario completa manualmente la acción correspondiente a mismo atajo.

Tu app realiza un seguimiento del uso de los atajos dinámicos llamando al pushDynamicShortcut() y pásale el ID del atajo cuando un elemento evento relevante. Enviar el uso dinámico de atajos con este método las apps de asistencia, como Asistente de Google, sugieren atajos relevantes a los usuarios. Debido a que el método pushDynamicShortcut() informa el uso cuando se lo llama, no llames a el método reportShortcutUsed() para los mismos accesos directos.

Para accesos directos relacionados con conversaciones, es importante realizar un seguimiento del uso de salientes y los mensajes entrantes. Para obtener más información, consulta las prácticas recomendadas para personas y las conversaciones virtuales.

Cómo inhabilitar accesos directos

Debido a que tu aplicación y sus usuarios pueden fijar accesos directos al selector del dispositivo, es posible que estos accesos directos fijos puedan dirigir a los usuarios a acciones dentro de tu app que están desactualizadas o ya no existen. Para manejar esta situación, puedes inhabilitar las combinaciones de teclas que no deseas que los usuarios seleccionen llamando disableShortcuts, que quita los accesos directos especificados de la estática y una lista de combinaciones de teclas dinámicas y, además, inhabilita las copias fijadas de estas combinaciones de teclas. Tú también puede usar una versión sobrecargada de este método que acepte un CharSequence como mensaje de error personalizado Ese mensaje de error aparece cuando los usuarios intentan iniciar cualquier acceso directo inhabilitado.

Límite de frecuencia

Cuando uses setDynamicShortcuts(), addDynamicShortcuts() updateShortcuts(), es posible que solo puedas llamar a estos métodos un una cantidad específica de veces en una app en segundo plano, una app sin actividades ni servicios en primer plano. El límite de la cantidad específica de veces que puedes llamar a estos métodos se denomina límite de frecuencia. Esta función evita ShortcutManagerCompat de recursos de dispositivos con consumo excesivo.

Cuando el límite de frecuencia está activo, isRateLimitingActive() muestra el valor verdadero. Sin embargo, el límite de frecuencia se restablece durante ciertos eventos, por lo que incluso las apps Puedes llamar a los métodos ShortcutManager hasta que se vuelva a alcanzar el límite de frecuencia. Estos eventos incluyen lo siguiente:

  • Una app pasa al primer plano.
  • Se cambia la configuración regional del sistema.
  • El usuario realiza la acción de respuesta en línea en una notificación.

Si encuentras un límite de frecuencia durante el desarrollo o las pruebas, puedes seleccionar Opciones para desarrolladores > Restablece la limitación de frecuencia de shortManager desde la configuración . También puedes ingresar el siguiente comando en adb:

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

Copia de seguridad y restablecimiento

Puedes permitir que los usuarios realicen operaciones de copia de seguridad y restablecimiento en tu app cuando cambiando de dispositivo incluyendo el android:allowBackup="true" atributo en el archivo de manifiesto de tu app. Si admites el servicio de copia de seguridad y restablecimiento, conserva los siguientes puntos sobre accesos directos a aplicaciones en mente:

  • Los accesos directos estáticos se vuelven a publicar automáticamente, pero solo después de que el usuario lo haga. vuelve a instalar tu app en un dispositivo nuevo.
  • No se crea una copia de seguridad de los atajos dinámicos, por lo que debes incluir la lógica en tu app para volver a publicarlos cuando un usuario abra tu app en un dispositivo nuevo.
  • Los accesos directos fijos se restablecen automáticamente en el selector del dispositivo, pero El sistema no crea copias de seguridad de los íconos asociados con accesos directos fijos. Por lo tanto, ahorra tus atajos fijados imágenes en tu app para que sea fácil restablecerlas en un dispositivo nuevo.

En el siguiente fragmento de código, se muestra la mejor manera de restablecer la dinámica de tu app accesos directos y cómo comprobar si se conservaron los accesos directos fijos de tu app:

Kotlin

class MyMainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.dynamicShortcuts.size == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.pinnedShortcuts.size > 0) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}

Java

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) {
                // Pinned shortcuts are restored. Use pdateShortcuts() to make
                // sure they contain up-to-date information.
            }
        }
    }
    // ...
}