Cómo crear accesos directos

Los accesos directos entregan tipos específicos de contenido a tus usuarios ayudándolos acceder rápidamente a partes de tu app.

Una imagen que muestra el contraste entre los accesos directos a aplicaciones y los accesos directos fijos
Figura 1: Accesos directos a aplicaciones y accesos directos fijos.

La forma de entregar contenido con accesos directos depende de tu caso de uso y de si el contexto del atajo es controlado por la app o por el usuario. Aunque no se puede el contexto del atajo no cambia y el contexto de un atajo dinámico constantemente cambios, tu app impulsa el contexto en ambos casos. En los casos en que un usuario selecciona la forma en que la app entrega contenido (por ejemplo, con un acceso directo fijo) el usuario define el contexto. Las siguientes situaciones describen algunos usos mayúsculas para cada tipo de combinación de teclas:

  • Estática los accesos directos son mejores para las apps que vinculan a contenido con una durante el ciclo de vida de la interacción de un usuario con el Porque la mayoría de los selectores solo mostrar cuatro accesos directos a la vez, los estáticos son útiles para realizar una rutina tarea de forma constante, por ejemplo, si el usuario quiere ver su calendario o correo electrónico de una manera específica .
  • Dinámica las combinaciones de teclas se usan para acciones en apps que son sensibles al contexto. Las combinaciones de teclas que dependen del contexto se adaptan acciones que los usuarios realizan en una app. Por ejemplo, si creas un juego que permite para que el usuario comience desde su nivel actual en el lanzamiento, debes actualizar el atajo con frecuencia. Usar un acceso directo dinámico te permite actualizar el acceso directo. cada vez que el usuario pasa de nivel.
  • Fijado los atajos se usan para acciones específicas controladas por el usuario. Por ejemplo: un usuario podría querer fijar un sitio web específico al selector. Este es Son beneficiosas porque permite que el usuario realice una acción personalizada, como navegar al sitio web en un solo paso, más rápido que si usaras una configuración instancia de un navegador.

Cómo crear accesos directos estáticos

Los atajos estáticos proporcionan vínculos a acciones genéricas en tu app, y estos deben mantenerse coherentes durante la vida útil de la versión actual de tu aplicación. Algunas buenas opciones para accesos directos estáticos incluyen ver los mensajes enviados, configurar una y mostrar la actividad de ejercicio del usuario correspondiente al día.

Para crear un acceso directo estático, haz lo siguiente:

  1. En el archivo AndroidManifest.xml de tu app, busca la actividad cuyo los filtros de intents están configurados android.intent.action.MAIN acción y el android.intent.category.LAUNCHER categoría.

  2. Agrega un <meta-data> a esta actividad que hace referencia al archivo de recursos en el que se encuentra combinaciones de teclas:

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.example.myapplication">
        <application ... >
          <activity android:name="Main">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            <meta-data android:name="android.app.shortcuts"
                       android:resource="@xml/shortcuts" /> 
          </activity>
        </application>
      </manifest>
      
  3. Crea un nuevo archivo de recursos llamado res/xml/shortcuts.xml.

  4. En el nuevo archivo de recursos, agrega un elemento raíz <shortcuts>. que contiene una lista de elementos <shortcut>. En cada elemento <shortcut>, incluye información sobre un elemento estático acceso directo, incluidos su ícono, etiquetas de descripción y los intents que inicia dentro de la aplicación:

      <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
        <shortcut
          android:shortcutId="compose"
          android:enabled="true"
          android:icon="@drawable/compose_icon"
          android:shortcutShortLabel="@string/compose_shortcut_short_label1"
          android:shortcutLongLabel="@string/compose_shortcut_long_label1"
          android:shortcutDisabledMessage="@string/compose_disabled_message1">
          <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.myapplication"
            android:targetClass="com.example.myapplication.ComposeActivity" />
          <!-- If your shortcut is associated with multiple intents, include them
               here. The last intent in the list determines what the user sees when
               they launch this shortcut. -->
          <categories android:name="android.shortcut.conversation" />
          <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
        </shortcut>
        <!-- Specify more shortcuts here. -->
      </shortcuts>
      

Cómo personalizar valores de atributos

La siguiente lista incluye descripciones de los diferentes atributos que un atajo estático. Proporciona un valor para android:shortcutId y android:shortcutShortLabel Todos los demás valores son opcionales.

android:shortcutId

Un literal de cadena que representa el atajo cuando un ShortcutManager que el objeto realice operaciones en él.

android:shortcutShortLabel

Esta es una frase concisa que describe el propósito del acceso directo. Cuando sea posible, limita esta descripción breve a 10 caracteres.

Para obtener más información, consulta setShortLabel()

android:shortcutLongLabel

Este es una frase extendida que describe el propósito del acceso directo. Si hay suficiente espacio, el selector muestra este valor en lugar de android:shortcutShortLabel Cuando sea posible, limita este tiempo de 25 caracteres.

Para obtener más información, consulta setLongLabel()

android:shortcutDisabledMessage

Es el mensaje que aparece en un selector compatible cuando el usuario intenta hacer lo siguiente: Inicia un atajo inhabilitado. El mensaje debe explicar al usuario por qué la combinación de teclas está inhabilitada. El valor de este atributo no tiene efecto si android:enabled es true.

android:enabled

Determina si el usuario puede interactuar con el acceso directo desde un dispositivo compatible de Google. El valor predeterminado de android:enabled es true Si lo estableces en false, establece una android:shortcutDisabledMessage que explica por qué estás inhabilitar la combinación de teclas. Si considera que no es necesario proporcionar este tipo de mensaje, Quita por completo el acceso directo del archivo en formato XML.

android:icon

El mapa de bits o adaptable ícono que el selector usa cuando se le muestra el acceso directo al usuario. Esta puede ser la ruta a una imagen o el archivo de recursos que contiene la imagen. Usa íconos adaptables siempre que sea posible para mejorar el rendimiento y mantener la coherencia.

Cómo configurar elementos internos

El archivo en formato XML que enumera los accesos directos estáticos de una app admite lo siguiente: elementos dentro de cada elemento <shortcut>. Tú debe incluir un elemento interno intent para cada atajo estático que definas.

intent

Esta es la acción que el sistema inicia cuando el usuario selecciona el acceso directo. Este intent debe proporcionar un valor para android:action. .

Puedes proporcionar varios intents para un solo acceso directo. Consulta Administrar varios intents y actividades Establecer un intent y el TaskStackBuilder la referencia de clase para obtener más detalles.

categories

Proporciona una agrupación para los tipos de acciones con los que se encuentran los accesos directos de tu app. realizar, como crear nuevos mensajes de chat.

Para obtener una lista de las categorías de accesos directos compatibles, consulta la ShortcutInfo la referencia de clase.

capability-binding

Declara la capacidad. vinculado con el atajo.

En el ejemplo anterior, el atajo está vinculado a una función declarada para CREATE_MESSAGE: que es una función de Acciones en apps un intent integrado. Esta vinculación de capacidad permite a los usuarios usar comandos por voz con Asistente de Google para invocar un atajo

Cómo crear accesos directos dinámicos

Los accesos directos dinámicos proporcionan vínculos a acciones específicas y contextuales en tu app. Estas acciones pueden cambiar entre los usos de tu app y mientras la app está activa se esté ejecutando. Los buenos usos de los atajos dinámicos incluyen llamar a una persona específica, navegar a una ubicación específica y cargar un juego desde la última vez que el usuario guardó punto. También puedes usar accesos directos dinámicos para abrir una conversación.

El ShortcutManagerCompat La biblioteca de Jetpack es auxiliar para las ShortcutManager API, que te permite administrar atajos dinámicos en tu app. Con el La biblioteca ShortcutManagerCompat reduce el código estándar y ayuda asegúrate de que tus combinaciones de teclas funcionen de forma coherente en todas las versiones de Android. Esta también se requiere la biblioteca para enviar atajos dinámicos de modo que sean aptos aparezca en plataformas de Google, como Asistente, con el Biblioteca de integración de accesos directos de Google.

La API de ShortcutManagerCompat permite que tu app realice lo siguiente con accesos directos dinámicos:

  • Envío y actualización: usa pushDynamicShortcut() para publicar y actualizar tus atajos dinámicos. Si ya hay grupos de anuncios o accesos directos fijos con el mismo ID, cada acceso directo mutable se actualiza.
  • Quitar: Quita un conjunto de accesos directos dinámicos con removeDynamicShortcuts() Quitar todos los accesos directos dinámicos con removeAllDynamicShortcuts()

Para obtener más información sobre cómo realizar operaciones en combinaciones de teclas, consulta Cómo administrar accesos directos y las ShortcutManagerCompat referencia.

Este es un ejemplo de cómo crear un atajo dinámico y asociarlo con tu app:

Kotlin

val shortcut = ShortcutInfoCompat.Builder(context, "id1")
        .setShortLabel("Website")
        .setLongLabel("Open the website")
        .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
        .setIntent(Intent(Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")))
        .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

Java

ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(context, "id1")
    .setShortLabel("Website")
    .setLongLabel("Open the website")
    .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
    .setIntent(new Intent(Intent.ACTION_VIEW,
                   Uri.parse("https://www.mysite.example.com/")))
    .build();

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut);

Cómo agregar la Biblioteca de integración de accesos directos de Google

La Biblioteca de integración de accesos directos de Google es una biblioteca de Jetpack opcional. Integra te permite enviar atajos dinámicos que se pueden mostrar en plataformas de Android, como como el selector, y plataformas de Google, como Asistente. Usa esta biblioteca Ayuda a los usuarios a descubrir tus accesos directos para acceder rápidamente a contenido específico o volver a reproducirlo. acciones en tu app.

Por ejemplo, una app de mensajería podría enviar un atajo dinámico a un contacto llamado "Alex" después de que un usuario envía un mensaje a esa persona. Después de que el atajo dinámico si el usuario le pregunta a Asistente: "Hey Google, envía un mensaje a Alex AppDeEjemplo", Asistente puede iniciar AppDeEjemplo y configurarla automáticamente. para enviarle un mensaje a Alex.

Los accesos directos dinámicos enviados con esta biblioteca no están sujetos a la límites de atajos se aplican por dispositivo. Esto permite que tu app envíe un atajo cada vez que usuario completa una acción asociada en tu app. Envía atajos frecuentes le permite a Google comprender los patrones de uso del usuario y sugerirte accesos directos relevantes a ellas.

Por ejemplo, Asistente puede aprender de los atajos enviados desde tu app de seguimiento de estado físico que un usuario suele ejecutar cada mañana y de manera proactiva sugerir un "empezar a correr" atajo cuando el usuario toma el teléfono en la por la mañana.

La Biblioteca de integración de atajos de Google no ofrece la funcionalidad en sí. Si agregas esta biblioteca a tu app, las plataformas de Google podrán usar en los accesos directos que envía tu app con ShortcutManagerCompat

Para usar la biblioteca en tu app, sigue estos pasos:

  1. Actualiza tu archivo gradle.properties para admitir Bibliotecas de AndroidX:

          
          android.useAndroidX=true
          # Automatically convert third-party libraries to use AndroidX
          android.enableJetifier=true
          
          
  2. En app/build.gradle, agrega dependencias para la biblioteca cliente de Google Biblioteca de integración de accesos directos y ShortcutManagerCompat:

          
          dependencies {
            implementation "androidx.core:core:1.6.0"
            implementation 'androidx.core:core-google-shortcuts:1.0.0'
            ...
          }
          
          

Con las dependencias de la biblioteca agregadas a tu proyecto de Android, tu app puede usar el método pushDynamicShortcut() desde ShortcutManagerCompat para enviar atajos dinámicos aptos para que se muestren en el selector y en las plataformas de Google participantes.

Cómo crear accesos directos fijos

En Android 8.0 (nivel de API 26) y versiones posteriores, puedes crear accesos directos fijos. A diferencia de los accesos directos estáticos y dinámicos, los accesos directos fijos aparecen en los selectores como íconos independientes. En la Figura 1, se muestra la diferencia entre estos dos tipos de atajos.

Para fijar un acceso directo a un selector compatible con tu app, completa las los siguientes pasos:

  1. Usa isRequestPinShortcutSupported() para verificar que el selector predeterminado del dispositivo admita la fijación en la app de de acceso directo.
  2. Crea un objeto ShortcutInfo de dos maneras diferentes, según en función de si el acceso directo existe:

    1. Si el acceso directo ya existe, crea un objeto ShortcutInfo que contiene solo el ID del acceso directo existente. El sistema encuentra y fija todos otra información relacionada con el acceso directo.
    2. Si quieres fijar un nuevo acceso directo, crea un ShortcutInfo un objeto que contiene un ID, un intent y una etiqueta breve para el nombre atajo.
  3. Llama para fijar el acceso directo al selector del dispositivo. requestPinShortcut() Durante este proceso, puedes pasar una PendingIntent que notifica a tu app solo cuando el acceso directo se fija con éxito.

    Después de fijar un acceso directo, la app puede actualizar su contenido con la updateShortcuts() . Para obtener más información, lee lo siguiente: Actualizar accesos directos.

En el siguiente fragmento de código, se muestra cómo crear un acceso directo fijo.

Kotlin

val shortcutManager = getSystemService(ShortcutManager::class.java)

if (shortcutManager!!.isRequestPinShortcutSupported) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfo.Builder(context, "my-shortcut").build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0)

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.intentSender)
}

Java

ShortcutManager shortcutManager =
        context.getSystemService(ShortcutManager.class);

if (shortcutManager.isRequestPinShortcutSupported()) {
    // Enable the existing shortcut with the ID "my-shortcut".
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "my-shortcut").build();

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    Intent pinnedShortcutCallbackIntent =
            shortcutManager.createShortcutResultIntent(pinShortcutInfo);

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    PendingIntent successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0);

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.getIntentSender());
}

Cómo crear una actividad de accesos directos personalizada

Una imagen en la que se muestra la actividad de diálogo personalizado donde se muestra el mensaje “Haz lo siguiente”
  ¿Quieres agregar el ícono de selector de Gmail a tu pantalla principal?&quot;. En la tabla
  las opciones son &quot;No, gracias&quot; y &#39;Agregar icono&#39;.
Figura 2: Ejemplo de una actividad personalizada de diálogo de acceso directo a aplicaciones

También puedes crear una actividad especializada que ayude a los usuarios a crear atajos completo con opciones personalizadas y un botón de confirmación. En la figura 2, se muestra un ejemplo de este tipo de actividad en la aplicación Gmail.

En el archivo de manifiesto de tu app, agrega ACTION_CREATE_SHORTCUT junto al nombre de la actividad <intent-filter> . Esta declaración establece el siguiente comportamiento cuando el usuario intenta Para crear una combinación de teclas, haz lo siguiente:

  1. El sistema inicia la actividad especializada de tu app.
  2. El usuario configura opciones para el acceso directo.
  3. El usuario selecciona el botón de confirmación.
  4. Tu app crea el atajo con la función createShortcutResultIntent() . Este método devuelve un Intent, que tu app retransmite a la actividad que se ejecutó antes mediante setResult()
  5. Llamadas de tu app finish() en la actividad que se usó para crear el acceso directo personalizado.

De manera similar, tu app puede solicitar a los usuarios que agreguen accesos directos fijos a la página principal después de la instalación o la primera vez que se inicia la aplicación. Este método es eficaz porque ayuda a tus usuarios a crear un atajo como parte de sus flujo de trabajo normal.

Cómo probar combinaciones de teclas

Para probar los accesos directos de tu app, instálala en un dispositivo con un selector que admita atajos. Luego, realiza las siguientes acciones:

  • Tocar y mantén presionado el ícono de selector de tu app para ver los accesos directos que definas para tu app.
  • Arrastra un acceso directo para fijarlo al selector del dispositivo.