Qual é o objetivo de “android.intent.category.DEFAULT”?


104

Qual é o propósito de usar android.intent.category.DEFAULTno campo Categoria dos Filtros de Intenção?


2
Ao dizer que este é o ponto de entrada padrão para seu aplicativo. Veja: developer.android.com/reference/android/content/…
Blundell

@Blundell: então se um intent implícito chegar, uma atividade com default como sua categoria no filtro de intent será chamada?
Pravy de

1
Acredito que seja usado para sugerir que esta é a atividade para usar sim "é para uso em filtros de intenção especificados em pacotes"
Blundell

se mais de uma atividade contiver default como sua categoria, em seus respectivos filtros de intent qual atividade será chamada?
Pravy de

Se eles tiverem filtros de intent diferentes, isso dependerá da intent.
Blundell de

Respostas:


112

As categorias são usadas para intents implícitos. Portanto, se sua atividade pode ser iniciada por um intent implícito quando nenhuma outra categoria específica é atribuída à atividade, o filtro de intent da atividade deve incluir esta categoria. (mesmo se você tiver outras categorias no filtro Intent). Se você tiver certeza de que sua atividade deve ser chamada com qualquer outra categoria, não use o Padrão.

Definir a categoria como padrão não significa que esta atividade será usada por padrão quando seu aplicativo for iniciado. A Activity apenas diz ao sistema que " Oh, eu poderia ser iniciado, mesmo se a categoria do Intent inicial estiver definida como Nada ! "


27
Esta foi realmente uma explicação compreensível. Compare esta resposta com os documentos: "Defina se a atividade deve ser uma opção para a ação padrão (pressionar central) a ser executada em um dado data "Quão difícil pode ser escrever uma descrição compreensível ...
Andreas

Não tenho certeza sobre o seu mandato, pois parece ser opcional, uma vez que uma atividade sem qualquer filtro de intenção ainda pode ser chamada como uma atividade implícita
humblerookie

6
A documentação agora é mais clara IMO: o Android aplica automaticamente a categoria CATEGORY_DEFAULT a todos os intents implícitos passados ​​para startActivity () e startActivityForResult (). Portanto, se você deseja que sua atividade receba intents implícitos, ela deve incluir uma categoria para "android.intent.category.DEFAULT" em seus filtros de intent.
shkschneider

2
@humblerookie. Eu tentei e não funciona sem a categoria DEFAULT. Se você não acredita em mim, teste você mesmo.
Bob Ueland

2
Se apenas todos os tutoriais foram escritos desta forma. Por que ainda usamos uma linguagem de madeira em 2018?
SudoPlz

24

Esta categoria é usada principalmente para intenções implícitas. Se sua atividade deseja ser iniciada por uma intenção implícita, deve incluir este catetor em seu filtro.

Acho que o termo "padrão" deve ser entendido como " candidato padrão ". Se a ação em uma parte dos dados for resolvida em várias atividades, o Android apresentará todos os candidatos ao usuário e o usuário poderá selecionar seu padrão preferido.

Referência:

http://developer.android.com/guide/components/intents-filters.html

Extraia dessa página:

O Android trata todos os intents implícitos passados ​​para tostartActivity () como se eles contivessem pelo menos uma categoria: "android.intent.category.DEFAULT" (a constante CATEGORY_DEFAULT). Portanto, as atividades que desejam receber intents implícitos devem incluir "android.intent.category.DEFAULT" em seus filtros de intent. (Filtros com as configurações "android.intent.action.MAIN" e "android.intent.category.LAUNCHER" são a exceção. Eles marcam atividades que iniciam novas tarefas e que são representadas na tela do iniciador. Eles podem incluir "android.intent .category.DEFAULT "na lista de categorias, mas não é necessário.)


@Comptrol, sua resposta não está mais abaixo. Ele está subindo. :-)
Ellen Spertus

Sim, mas eu rolei de volta para o estado que estava. Portanto, no geral, não mudei absolutamente nada.
Özgür

1
Acho esta resposta mais útil para meus filtros de intenção de compreensão da situação atual. obrigado.
Neon Warge

1

Na verdade, é para garantir que suas outras atividades possam ser chamadas quando o aplicativo estiver em execução. LAUNCHER fará com que a atividade que o contém seja a primeira atividade a ser iniciada. Para usar as intenções para chegar às outras atividades, elas devem ser listadas como atividades "reais" colocando DEFAULT. Isso é pelo que eu sei, então não me cite se estiver errado.


3
Você deve se esforçar para fornecer referências para suas reivindicações. "não me cite se estiver errado" não permite que você substitua esta regra.
verybadalloc

A referência que tenho é um projeto no qual trabalhei enquanto estudava sobre codificação Android. Se você quiser os arquivos de origem, terei prazer em enviá-los.
CHT

1

As atividades precisarão oferecer suporte a CATEGORY_DEFAULT para que possam ser encontradas por Context.startActivity ().

Para receber intents implícitos, você deve incluir a categoria CATEGORY_DEFAULT no filtro de intent. Os métodos startActivity () e startActivityForResult () tratam todas as intents como se declarassem a categoria CATEGORY_DEFAULT. Se não o declararmos em nosso filtro de intent, nenhuma intent implícita resolverá nossa atividade.


0

É usado para declarar alguma operação como ação padrão (como seu nome sugere). Vamos considerar que temos um aplicativo de bloco de notas (referindo-se ao exemplo de bloco de notas do Android). A primeira página do aplicativo consiste em uma lista de todos os arquivos do bloco de notas. Quando um arquivo de bloco de notas é selecionado, uma das operações como editar nota, excluir nota, etc. pode ser realizada. Mas eu quero fazer a edição como minha ação padrão, o que significa que quando eu pressiono o botão central do meu teclado, a janela de edição deve ser aberta.


1
Se você olhar o exemplo do bloco de notas do Android, todas as atividades estão marcadas como padrão: developer.android.com/reference/android/content/Intent.html
Peter Ajtai,

0

https://developer.android.com/guide/components/intents-filters

Para receber intents implícitos, você deve incluir a categoria CATEGORY_DEFAULT no filtro de intent. Os métodos startActivity () e startActivityForResult () tratam todas as intents como se declarassem a categoria CATEGORY_DEFAULT. Se você não declarar essa categoria em seu filtro de intent, nenhuma intent implícita será resolvida para sua atividade.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.