Os atalhos apresentam tipos específicos de conteúdo para os usuários, ajudando-os a acessar rapidamente as partes do seu app.
A maneira como você apresenta conteúdos com os atalhos depende do caso de uso e se o contexto do atalho é orientado pelo app ou pelo usuário. Embora o contexto de um atalho estático não mude, e o contexto de um atalho dinâmico mude constantemente, em ambos os casos ele é direcionado pelo app. Nos casos em que o usuário escolhe como o app vai mostrar o conteúdo, como com um atalho fixado, o contexto é definido pelo usuário. Os cenários a seguir descrevem alguns casos de uso para cada tipo de atalho:
- Os atalhos estáticos são melhores para apps vinculados a conteúdo que usa uma estrutura consistente ao longo da interação do usuário com o app. Como a maior parte das telas de início só pode mostrar quatro atalhos por vez, os atalhos estáticos são úteis para realizar uma tarefa de rotina de maneira consistente, como se o usuário quiser ver o calendário ou e-mail de uma forma específica.
- Os atalhos dinâmicos são usados para ações em apps com reconhecimento de contexto. Os atalhos sensíveis ao contexto são personalizados para as ações que os usuários realizam em um app. Por exemplo, se você criar um jogo que permite que o usuário comece de seu nível atual na inicialização, atualize o atalho com frequência. O uso de um atalho dinâmico permite que o atalho seja atualizado sempre que o usuário terminar uma fase.
- Os atalhos fixados são usados para ações específicas, controladas pelo usuário. Por exemplo, o usuário pode querer fixar um site específico na tela de início. Isso é bom, porque permite que o usuário realize uma ação personalizada, como navegar para o site em uma só etapa, de modo mais rápido do que com o uso de uma instância padrão de um navegador.
Criar atalhos estáticos
Os atalhos estáticos oferecem links para ações genéricas no app. Essas ações precisam permanecer consistentes ao longo da vida útil da versão atual do app. Algumas boas opções para atalhos estáticos são ver mensagens enviadas, definir um alarme e mostrar a atividade física do usuário para um dia específico.
Para criar um atalho estático, faça o seguinte:
- No arquivo
AndroidManifest.xmldo app, localize a atividade cujos filtros de intent estejam configurados para a açãoandroid.intent.action.MAINe a categoriaandroid.intent.category.LAUNCHER. Adicione um
<meta-data>elemento a essa atividade que faça referência ao arquivo de recursos em que os atalhos do app estão definidos:<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>Crie um novo arquivo de recursos chamado
res/xml/shortcuts.xml.No novo arquivo de recursos, adicione um elemento raiz
<shortcuts>que contenha uma lista de<shortcut>elementos. Em cada elemento<shortcut>, inclua informações sobre um atalho estático, incluindo o ícone, as etiquetas de descrição e as intents que ele inicia no app:<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.Main" /> <!-- 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>
Personalizar valores de atributos
A lista a seguir inclui descrições dos diferentes atributos em um atalho estático. Forneça um valor para android:shortcutId e android:shortcutShortLabel. Todos os outros valores são opcionais.
android:shortcutIdUm literal de string que representa o atalho quando um
ShortcutManagerobjeto executa operações nele.@string/shortcut_idandroid:shortcutShortLabelUma frase concisa que descreve a finalidade do atalho. Sempre que possível, limite essa descrição curta a 10 caracteres.
Para mais informações, consulte
setShortLabel().android:shortcutLongLabelUma frase estendida que descreve a finalidade do atalho. Se houver espaço suficiente, a tela de início vai mostrar esse valor em vez de
android:shortcutShortLabel. Sempre que possível, limite essa descrição longa a 25 caracteres.Para mais informações, consulte
setLongLabel().android:shortcutDisabledMessageMensagem que aparece em uma tela de início compatível quando o usuário tenta iniciar um atalho desativado. A mensagem precisa explicar ao usuário por que o atalho está desativado. O valor desse atributo não tem efeito se
android:enabledfortrue.android:enabledDetermina se o usuário pode interagir com o atalho a partir de uma tela de início compatível. O valor padrão de
android:enabledétrue. Se você definir comofalse, defina umandroid:shortcutDisabledMessageque explique por que você está desativando o atalho. Se você não acha necessário mostrar essa mensagem, remova completamente o atalho do arquivo XML.android:iconO bitmap ou ícone adaptativo usado pela tela de início ao exibir o atalho para o usuário. Esse valor pode ser o caminho para uma imagem ou o arquivo de recursos contendo a imagem. Use ícones adaptativos sempre que possível para melhorar o desempenho e a consistência.
Configurar elementos internos
O arquivo XML que lista os atalhos estáticos de um app é compatível com os seguintes
elementos dentro de cada <shortcut> elemento. Você precisa incluir um elemento interno intent de para cada atalho estático definido.
intentA ação que o sistema inicia quando o usuário seleciona o atalho. Essa intent precisa fornecer um valor para o atributo
android:action.É possível fornecer várias intents para um único atalho. Consulte Gerenciar várias intents e atividades, Definir uma intent, e a
TaskStackBuilderreferência de classe para saber mais detalhes.categoriesFornece um agrupamento dos tipos de ações executadas pelos atalhos do seu app, como a criação de novas mensagens de chat.
Para ver uma lista de categorias de atalhos compatíveis, consulte a
ShortcutInforeferência de classe.capability-bindingDeclara o recurso vinculado ao atalho.
No exemplo anterior, o atalho está vinculado a um recurso declarado para
CREATE_MESSAGE, que é uma intent integrada de Ações no app. Essa vinculação de recursos permite que os usuários usem comandos falados com o Google Assistente para invocar um atalho.
Criar atalhos dinâmicos
Os atalhos dinâmicos oferecem links para ações específicas e contextuais no app. Essas ações podem mudar entre os usos do app e até mesmo enquanto ele está em execução. Alguns bons usos para atalhos dinâmicos são ligar para uma pessoa específica, navegar para um local específico e carregar um jogo a partir do último ponto salvo pelo usuário. Você também pode usar atalhos dinâmicos para abrir uma conversa.
A biblioteca do Jetpack ShortcutManagerCompat auxilia a API
ShortcutManager, que permite gerenciar atalhos dinâmicos no seu
app. O uso da biblioteca ShortcutManagerCompat reduz o código boilerplate e
ajuda a garantir que seus atalhos funcionem de forma consistente em todas as versões do Android. Essa
biblioteca também é necessária ao enviar atalhos dinâmicos para que eles sejam qualificados
para exibição nas plataformas do Google, como o Assistente, com a biblioteca de integração do Google
Shortcuts.
A API ShortcutManagerCompat permite que o app execute as seguintes operações com atalhos dinâmicos:
- Enviar e atualizar: use
pushDynamicShortcut()para publicar e atualizar seus atalhos dinâmicos. Se já houver atalhos dinâmicos ou fixados com o mesmo código, todos os atalhos mutáveis serão atualizados. - Remover: remova um conjunto de atalhos dinâmicos usando
removeDynamicShortcuts(). Remova todos os atalhos dinâmicos usandoremoveAllDynamicShortcuts().
Para mais informações sobre como executar operações em atalhos, consulte Gerenciar
atalhos e a referência ShortcutManagerCompat.
Confira um exemplo de como criar um atalho dinâmico e associá-lo ao seu app:
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)
Adicionar a biblioteca de integração do Google Shortcuts
A biblioteca de integração do Google Shortcuts é uma biblioteca opcional do Jetpack. Ela permite que você envie atalhos dinâmicos que podem aparecer nas plataformas do Android, como a tela de início, e nas plataformas do Google. O uso dessa biblioteca ajuda os usuários a descobrir seus atalhos para acessar conteúdo específico ou repetir ações no seu app rapidamente.
Os atalhos dinâmicos enviados com essa biblioteca não estão sujeitos aos limites de atalhos aplicados por dispositivo. Isso permite que o app envie um atalho sempre que um usuário concluir uma ação associada no seu app. Enviar atalhos frequentes dessa maneira permite que o Google entenda os padrões de uso do usuário e sugira atalhos contextualmente relevantes para ele.
Por exemplo, o Assistente pode aprender com atalhos enviados do seu app de monitoramento de condicionamento físico que um usuário costuma correr toda manhã e sugerir proativamente um atalho "iniciar uma corrida" quando o usuário pegar o smartphone pela manhã.
A biblioteca de integração do Google Shortcuts não oferece nenhuma funcionalidade endereçável. Adicionar essa biblioteca ao app permite que as plataformas do Google processem os atalhos enviados pelo app usando ShortcutManagerCompat.
Para usar essa biblioteca no seu app, siga estas etapas:
Atualize seu arquivo
gradle.propertiespara oferecer compatibilidade com as bibliotecas AndroidX:android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=trueEm
app/build.gradle, adicione dependências para a Biblioteca de integração do Google Shortcuts eShortcutManagerCompat:dependencies { implementation "androidx.core:core:1.6.0" implementation 'androidx.core:core-google-shortcuts:1.0.0' ... }
Com as dependências de biblioteca adicionadas ao seu Projeto do Android, seu app pode usar o método pushDynamicShortcut() de ShortcutManagerCompat para enviar atalhos dinâmicos que são qualificados para exibição na tela de início e nas plataformas do Google participantes.
Criar atalhos fixados
No Android 8.0 (nível 26 da API) ou versões posteriores, é possível criar atalhos fixados. Ao contrário dos atalhos estáticos e dinâmicos, os atalhos fixados aparecem em telas de início compatíveis como ícones separados. A Figura 1 mostra a diferença entre esses dois tipos de atalhos.
Para fixar um atalho a uma tela de início compatível usando seu app, siga estas etapas:
- Use
isRequestPinShortcutSupported()para verificar se a tela de início padrão do dispositivo é compatível com a fixação de atalhos no app. Crie um objeto
ShortcutInfode uma das duas formas, dependendo da existência ou não do atalho:- Se o atalho já existe, crie um objeto
ShortcutInfoque contenha apenas o ID do atalho existente. O sistema encontra e fixa automaticamente todas as outras informações relacionadas ao atalho. - Ao fixar um novo atalho, crie um objeto
ShortcutInfocontendo um ID, uma intent e uma descrição curta do novo atalho.
- Se o atalho já existe, crie um objeto
Fixe o atalho à tela de início do dispositivo chamando
requestPinShortcut(). Durante esse processo, é possível transmitir umPendingIntentobjeto, que notifica seu app somente quando o atalho é fixado.Depois que o atalho é fixado, o app pode atualizar o conteúdo usando o
updateShortcuts()método. Para ver mais informações, leia Atualizar atalhos.
O snippet de código a seguir demonstra como criar um atalho fixado.
val shortcutManager = getSystemService<ShortcutManager>()
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)
}
Criar uma atividade de atalho personalizada
Também é possível criar uma atividade especializada que ajuda o usuário a criar atalhos, com opções personalizadas e um botão de confirmação. A Figura 2 mostra um exemplo desse tipo de atividade no app Gmail.
Adicione ACTION_CREATE_SHORTCUT ao elemento <intent-filter> da atividade no arquivo de manifesto do seu app. Essa declaração define o seguinte comportamento quando o usuário tenta criar um atalho:
- O sistema inicia a atividade especializada do app.
- O usuário define opções para o atalho.
- O usuário seleciona o botão de confirmação.
- Seu app cria o atalho usando o
createShortcutResultIntent()método. Esse método retorna umIntent, que o app redireciona de volta para a atividade que estava em execução anteriormente, usandosetResult(). - O app chama
finish()na atividade usada para criar o atalho personalizado.
Da mesma forma, o app pode solicitar que o usuário adicione atalhos fixados à tela inicial após a instalação ou na primeira vez em que o app for iniciado. Esse método é eficiente porque ajuda o usuário a criar um atalho como parte do fluxo de trabalho comum.
Testar atalhos
Para testar os atalhos do app, instale-o em um dispositivo com uma tela de início compatível com atalhos. Em seguida, faça o seguinte:
- Toque e pressione o ícone do seu app na tela de início para ver os atalhos que você definiu para o app.
- Arraste um atalho para fixá-lo na tela de início do dispositivo.