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
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:
- Atajos estáticos: atajos cuyo método
isDeclaredInManifest()
muestratrue
. - Atajos dinámicos: Son aquellos cuyo
ShortcutInfo.isDynamic()
muestratrue
.
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()
:
- En el archivo
AndroidManifest.xml
, incluye la asignación del atributo.android:taskAffinity=
" en la actividad de trampolín. - 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
:
- Una app de chat publica cuatro accesos directos dinámicos, que representan los cuatro más Conversaciones recientes: c1, c2, c3 y c4.
- El usuario fija los cuatro accesos directos.
- 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.
- 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. - Puedes usar
addDynamicShortcuts(Context, List)
ysetDynamicShortcuts(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. } } } // ... }