Escolar Documentos
Profissional Documentos
Cultura Documentos
Uma atividade representa uma nica tela em um aplicativo. Voc pode iniciar uma nova
instncia de um Activity passando um Intent para startActivity () . A Inteno descreve a
atividade comear e carrega todos os dados necessrios.
Se voc quiser receber um resultado da atividade quando ele terminar, chame
startActivityForResult () . Sua atividade recebe o resultado como um separado Inteno
objeto da sua atividade onActivityResult () callback. Para mais informaes, consulte o
Atividades guia.
Tipos de Inteno
Existem dois tipos de intenes:
Quando voc cria uma inteno explcita de iniciar uma atividade ou servio, o sistema inicia
imediatamente o componente aplicativo especificado na Inteno objeto.
Figura 1 Ilustrao de como uma inteno implcita entregue atravs do sistema para iniciar
outra atividade: [1] Atividade A cria uma Intent com uma descrio da ao e passa para
startActivity () . [2] O sistema Android pesquisa todos os aplicativos para um filtro de inteno
que coincide com a inteno. Quando for encontrada uma correspondncia, [3] o sistema inicia
a atividade de correspondncia ( Atividade B ) invocando a sua onCreate () mtodo e passandoa Inteno .
Quando voc cria uma inteno implcita, o sistema Android encontra o componente
apropriado para comear comparando o contedo da inteno de os filtros inteno declarada
no arquivo de manifesto de outros aplicativos no dispositivo. Se a inteno corresponda a um
filtro inteno, o sistema inicia o componente e entrega-lo a Inteno objeto. Se vrios filtros
inteno forem compatveis, o sistema exibe uma caixa de dilogo para que o usurio possa
escolher qual aplicativo para usar.
Um filtro de inteno uma expresso no arquivo de manifesto de um aplicativo que
especifica o tipo de intenes que o componente gostaria de receber. Por exemplo, ao
declarar um filtro de inteno para uma atividade, voc torn-lo possvel para outros
aplicativos para iniciar diretamente a sua atividade com um certo tipo de inteno. Da mesma
forma, se voc no declarar quaisquer filtros de inteno para uma atividade, ento ele pode
ser iniciado apenas com a inteno explcita.
Ateno: Para garantir a sua aplicao segura, use sempre uma inteno explcita quando se
inicia um servio e no declarar filtros inteno por seus servios. Usando uma inteno
implcita para iniciar um servio um risco de segurana porque voc no pode ter certeza de
que o servio ir responder inteno, e que o usurio no pode ver que o servio ser
iniciado.
Dados
O URI (a Uri objeto) que referencia os dados a serem aproveitados e / ou o tipo MIME
dos dados. O tipo de dados fornecidos geralmente ditado pela ao da inteno. Por
exemplo, se a ao ACTION_EDIT , os dados devem conter o URI do documento a ser
editado.
Ao criar uma inteno, muitas vezes importante especificar o tipo de dados (seu tipo
MIME), alm de sua URI. Por exemplo, uma atividade que capaz de exibir imagens
provavelmente no ser capaz de reproduzir um arquivo de udio, embora os
formatos de URI poderia ser similar. Ento, especificando o tipo MIME dos seus dados
ajuda o sistema Android encontrar o melhor componente para receber a sua inteno.
No entanto, o tipo MIME, por vezes, pode ser inferida a partir da URI-especialmente
quando os dados so um contedo: URI, que indica os dados esto localizados no
dispositivo e controlado por um ContentProvider , o que faz com que o tipo MIME
dados disponveis para o sistema.
Para definir somente a URI de dados, chamada setData () . Para definir apenas o tipo
MIME, ligue SetType () . Se necessrio, voc pode definir tanto explicitamente com
setDataAndType().
Cuidado: Se voc quiser definir a URI e tipo MIME, no chamar setData () e SetType ()
porque cada um anula o valor do outro. Sempre use setDataAndType () para definir
tanto URI e tipo MIME.
Categoria
Uma sequncia contendo informaes adicionais sobre o tipo de componente que
deve lidar com a inteno. Qualquer nmero de descries de categoria pode ser
colocado em uma inteno, mas a maioria das intenes no necessitam de uma
categoria. Aqui esto algumas categorias comuns:
CATEGORY_BROWSABLE
A atividade alvo permite-se a ser iniciado por um navegador da Web para exibir dados
referenciados por um link, como uma imagem ou uma mensagem de e-mail.
CATEGORY_LAUNCHER
A atividade a atividade inicial de uma tarefa e est listada no lanador de aplicativos
do sistema.
Veja a Inteno descrio da classe para a lista completa de categorias.
Voc pode especificar uma categoria com AddCategory () .
Estas propriedades listadas acima (nome do componente, a ao, dados e categoria)
representam as caractersticas definidoras de uma inteno. Ao ler essas propriedades, o
sistema Android capaz de resolver qual componente aplicativo deve comear.
No entanto, a inteno pode carregar informaes adicionais que no afeta como ele
resolvido para um componente do aplicativo. Uma inteno tambm pode fornecer:
Extras
Pares de valores-chave que carregam a informao adicional necessria para realizar a ao
solicitada. Assim como algumas aes usar determinados tipos de URIs de dados, algumas
aes tambm usam particulares extras.
Voc pode adicionar dados extras com vrios (putExtra) mtodos, cada um aceitar dois
parmetros: O nome da chave eo valor. Voc tambm pode criar um pacote de objeto com
todos os dados extra, em seguida, insira o Bundle na Inteno com putExtras () .
Por exemplo, ao criar a inteno de enviar um email com ACTION_SEND , voc pode
especificar o "para" destinatrio com o EXTRA_EMAIL chave e especificar o "sujeito" com o
EXTRA_SUBJECT chave.
A Inteno classe especifica muitos EXTRA_ * constantes para os tipos de dados padronizados.
Se voc precisa declarar suas prprias teclas extras (para as intenes que o seu aplicativo
recebe), no se esquea de incluir o nome do pacote do seu aplicativo como um prefixo. Por
exemplo:
Bandeiras definidos na Inteno de classe que funcionam como metadados para a inteno. As
bandeiras podem instruir o sistema Android como iniciar uma atividade (por exemplo, qual
tarefa a atividade deveria pertencer a) e como trat-lo depois que ele lanado (por exemplo,
se ele pertence na lista de atividades recentes).
Para mais informaes, consulte os () SetFlags mtodo.
Exemplo inteno explcita
Uma inteno explcita aquela que voc usa para lanar um componente aplicativo
especfico, como uma determinada atividade ou servio em seu aplicativo. Para criar uma
inteno explcita, definir o nome do componente para os Inteno -objetos todas as outras
propriedades de inteno so opcionais.
Por exemplo, se voc construiu um servio em seu aplicativo, chamado DownloadService ,
projetado para baixar um arquivo da web, voc pode inici-lo com o seguinte cdigo:
// Executed in an Activity, so 'this' is the Context
// The fileUrl is a string URL, such as
"http://www.example.com/image.png"
Intent downloadIntent = new Intent(this, DownloadService.class);
downloadIntent.setData(Uri.parse(fileUrl));
startService(downloadIntent);
Nota: Neste caso, a URI no usado, mas o tipo de dados de inteno declarado para
especificar o contedo levado pelos extras.
Quando startActivity () chamado, o sistema analisa todos os aplicativos instalados para
determinar quais os que podem lidar com esse tipo de inteno (uma inteno com a
ACTION_SEND ao e que carrega "text / plain" de dados). Se h apenas um aplicativo que
pode lidar com isso, que o app abre imediatamente e dada a inteno. Se vrias actividades
aceitar a inteno, o sistema exibe uma caixa de dilogo para que o usurio pode escolher qual
aplicativo para usar ..
Forando um seletor de aplicativo
Quando h mais de um aplicativo que responde a sua
inteno implcita, o usurio pode selecionar qual aplicativo
para usar e fazer esse app a opo padro para a ao. Isso
bom quando se realiza uma ao para que o usurio
provavelmente quer usar o mesmo aplicativo a partir de
agora, como quando se abre uma pgina web (usurios
muitas vezes preferem apenas um navegador web).
No entanto, se vrios aplicativos podem responder inteno
e que o usurio pode querer usar um aplicativo diferente de
cada vez, voc deve mostrar explicitamente uma janela de
seleo. A caixa de dilogo selecionador pede ao usurio para
escolher qual aplicativo usar para a ao de cada vez (o
usurio no pode selecionar um aplicativo padro para a
ao). Por exemplo, quando seu aplicativo executa "share" com a ACTION_SEND ao, os
usurios podem querer compartilhar usando um aplicativo diferente, dependendo da sua
situao atual, por isso voc deve sempre usar a janela de seleo, como mostrado na figura 2.
Para mostrar o seletor, criar um Intent usando createChooser () e pass-lo para startActivity () .
Por exemplo:
Intent intent = new Intent(Intent.ACTION_SEND);
...
Isso exibe uma caixa de dilogo com uma lista de aplicativos que respondem inteno
passado para o createChooser () mtodo e usa o texto fornecido como o ttulo de dilogo.
atividade iniciado, ele inspeciona a Inteno e decide como se comportar com base nas
informaes da Inteno (como para mostrar os controles de edio ou no).
Cada filtro inteno definida por uma <intent-filter> elemento no ficheiro de manifesto do
aplicativo, aninhado no componente de aplicao correspondente (tal como um <activity>
elemento). Dentro do <intent-filter> , voc pode especificar o tipo de intenes para aceitar o
uso de um ou mais desses trs elementos:
<ao>
Declara a ao inteno aceito, no nome de atributo. O valor deve ser o valor de string literal
de uma ao, no a constante classe.
<dados>
Declara o tipo de dados aceitos, usando um ou mais atributos que especificam vrios aspectos
da URI de dados ( esquema , anfitrio , porta , caminho , etc) e do tipo MIME.
<category>
Declara a categoria inteno aceito, no nome de atributo. O valor deve ser o valor de string
literal de uma ao, no a constante classe.
Nota: A fim de receber as intenes implcitas, voc deve incluir o CATEGORY_DEFAULT
categoria no filtro de inteno. O mtodos startActivity () e startActivityForResult () tratar
todas as intenes, como se declarou a CATEGORY_DEFAULT categoria. Se voc no declarar
esta categoria em seu filtro de inteno, sem intenes implcitas ir resolver a sua atividade.
Por exemplo, aqui est uma declarao de atividade com um filtro de inteno de receber um
ACTION_SEND inteno quando o tipo de dados o texto:
<activity
<intent-filter>
<action
<category
<data
</intent-filter>
</activity>
No h problema em criar um filtro que inclui mais de uma instncia de <ao> , <dados> ou
<category> . Se voc fizer isso, voc s precisa ter certeza de que o componente pode lidar
com todas e quaisquer combinaes desses elementos filtrantes.
Quando voc quer lidar com vrios tipos de intenes, mas apenas em combinaes
especficas de ao, dados e tipo de categoria, ento voc precisa criar vrios filtros de
inteno.
<activity android:name="ShareActivity">
<!-- This activity handles "SEND" actions with text data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<!-- This activity also handles "SEND" and "SEND_MULTIPLE" with
media data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:mimeType="application/vnd.google.panorama360+jpg"/>
<data android:mimeType="image/*"/>
<data android:mimeType="video/*"/>
</intent-filter>
</activity>
Estes dois devem ser colocados juntos para que a atividade seja exibido na tela do menu de
aplicativos.
A segunda atividade, ShareActivity , destina-se a facilitar a partilha de texto e contedo de
mdia. Embora os usurios possam entrar nesta atividade navegando nele de MainActivity ,
eles tambm podem entrar ShareActivity diretamente de outro aplicativo que emite uma
inteno implcita combinando um dos dois filtros de inteno.
Nota: O tipo MIME, application/vnd.google.panorama360 + jpg , um tipo de dados especial
que especifica fotos panormicas, que voc pode manipular com o panorama do Google APIs.
Usando um Intent Pendendo
Declarar a inteno de ser executado quando o usurio executa uma ao com seu
Notificao (do sistema Android NotificationManager executa o Intent ).
Declarar a inteno de ser executado quando o usurio executa uma ao com seu
App Widget (o app tela inicial executa o Intent ).
Declarar a inteno de ser executado em um determinado momento no futuro (do
sistema Android AlarmManager executa o Intent ).
Porque cada Inteno objeto projetado para ser manuseado por um tipo especfico de
componente aplicativo (um Activity , um servio ou uma BroadcastReceiver ), assim tambm
deve a PendingIntent ser criado com a mesma considerao. Ao usar uma inteno pendente,
seu aplicativo no executar a inteno com uma chamada como startActivity () . Vez disso,
voc deve declarar o tipo de componente que se destina ao criar o PendingIntent chamando o
respectivo mtodo criador:
A menos que seu aplicativo est recebendo intenes pendentes de outros apps, os mtodos
acima para criar um PendingIntent so os nicos PendingIntent mtodos que voc
provavelmente vai precisar.
Cada mtodo leva o atual aplicativo Context , o Inteno voc deseja dispor, e um ou mais
sinalizadores que especificam como a inteno deve ser utilizado (por exemplo, se a inteno
pode ser usado mais de uma vez).
Mais informaes sobre o uso de intenes pendentes fornecida com a documentao para
cada um dos respectivos casos de uso, como nas notificaes e Widgets App guias API.
Inteno resoluo
Quando o sistema recebe uma inteno implcita de comear uma atividade, ele procura a
melhor atividade para a inteno, comparando a inteno de filtros de inteno com base em
trs aspectos:
A ao inteno
Os dados de inteno (ambos URI e tipo de dados)
A categoria de inteno
Teste Ao
Para especificar aes inteno aceitos, um filtro de inteno pode declarar zero ou mais
<action> elementos. Por exemplo:
<intent-filter>
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.VIEW" />
...
</intent-filter>
Para atravessar este filtro, a ao especificada no Inteno deve corresponder a uma das aes
listadas no filtro.
Se o filtro no listar todas as aes, no h nada para a inteno de corresponder, de modo
que todas as intenes falhar no teste. No entanto, se uma Inteno no especificar uma ao,
que vai passar no teste (desde que o filtro contenha pelo menos uma ao).
Teste Categoria
Para especificar categorias inteno aceitos, um filtro de inteno pode declarar zero ou mais
<category> elementos. Por exemplo:
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
...
</intent-filter>
Para a inteno de passar no teste de categoria, cada categoria no Inteno deve corresponder
a uma categoria no filtro. O inverso no necessrio-o filtro inteno pode declarar mais
categorias que so especificadas na Inteno e Inteno ainda vai passar. Portanto, a inteno
com nenhuma categoria deve sempre passar este teste, independentemente do que as
categorias so declarados no filtro.
Nota: Android aplica automaticamente a do CATEGORY_DEFAULT categoria para todas as
intenes implcitas passados para startActivity () e startActivityForResult () . Ento se voc
quer sua atividade para receber as intenes implcitas, deve incluir uma categoria para
"android.intent.category.DEFAULT" em seus filtros de inteno (como mostrado no anterior
<intent-filter> exemplo.
Teste de Dados
Para especificar dados inteno aceitos, um filtro de inteno pode declarar zero ou mais
<dados> elementos. Por exemplo:
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http" ... />
<data android:mimeType="audio/mpeg" android:scheme="http" ... />
...
</intent-filter>
Cada <dados> elemento pode especificar uma estrutura URI e um tipo de dados (tipo de mdia
MIME). H atributos separados - esquema , anfitrio , porto e caminho - para cada parte da
URI:
<scheme>://<host>:<port>/<path>
Por exemplo:
content://com.example.project:200/folder/subfolder/etc
Quando o URI numa inteno comparado com um URI especificao em um filtro, que
comparada apenas com as partes da URI includo no filtro. Por exemplo:
Nota: A especificao de caminho pode conter um curinga asterisco (*) para exigir apenas uma
correspondncia parcial do nome do caminho.
O teste compara os dados, tanto o URI e o tipo MIME na inteno de um tipo de URI e MIME
especificado no filtro. As regras so as seguintes:
a) Uma inteno que no contm nem uma URI nem um tipo MIME passa no teste
somente se o filtro no especificar quaisquer URIs ou tipos MIME.
b) Uma inteno que contm um URI, mas nenhum tipo de MIME (nem explcita nem
corolrios dos URI) passa no teste somente se seu URI corresponde formato URI do
filtro eo filtro tambm no especificar um tipo MIME.
c) Uma inteno que contm um tipo MIME, mas no uma URI passa no teste somente
se o filtro de lista o mesmo tipo MIME e no especifica um formato de URI.
d) Uma inteno que contm um URI e um tipo de MIME (explcito ou corolrios dos URI)
passa a parte tipo MIME do teste s se esse tipo corresponde a um tipo listado no
filtro. Ele passa a parte URI do teste ou se o seu URI corresponde a um URI no filtro ou
se ele tem um contedo: ou arquivo: URI eo filtro no especificar um URI. Em outras
palavras, presume-se que um componente para suportar o contedo: e file: dados se
suas listas de filtros apenas um tipo MIME.
Esta ltima regra, regra (d), reflete a expectativa de que os componentes so capazes de obter
dados locais de um arquivo ou contedo provedor. Portanto, seus filtros pode listar apenas um
tipo de dados e no precisa nomear explicitamente o contedo: e arquivo: esquemas. Este
um caso tpico. A <dados> elemento como o seguinte, por exemplo, diz Android que o
componente pode obter os dados de imagem a partir de um provedor de contedo e exibi-lo:
<intent-filter>
<data android:mimeType="image/*" />
...
</intent-filter>
Porque a maioria dos dados disponveis dispensado por provedores de contedo, filtros que
especificam um tipo de dados, mas no um URI so, talvez, o mais comum.
Outra configurao comum filtros com um esquema e um tipo de dados. Por exemplo, um
<dados> elemento como o seguinte diz Android que o componente pode recuperar dados de
vdeo a partir da rede, a fim de executar a ao:
<intent-filter>
<data android:scheme="http" android:type="video/*" />
...
</intent-filter>
Correspondncia de Inteno
Intenes so comparados aos filtros inteno no s para descobrir um componente de
destino para ativar, mas tambm para descobrir algo sobre o conjunto de componentes do
dispositivo. Por exemplo, o aplicativo inicial preenche o lanador de aplicativos, encontrando
todas as atividades com inteno filtros que especificam o ACTION_MAIN ao e
CATEGORY_LAUNCHER categoria.
O aplicativo pode usar a correspondncia inteno de uma maneira similar. O
PackageManager tem um conjunto de consulta ... () mtodos que retornam todos os
componentes que podem aceitar uma inteno particular, e uma srie similar de vontade ... ()
mtodos que determinam o melhor componente para responder a uma inteno. Por
exemplo, queryIntentActivities () retorna uma lista de todas as atividades que podem ser
executadas a inteno passado como um argumento, e queryIntentServices () retorna uma
lista similar de servios. Nenhum mtodo ativa os componentes; eles simplesmente listar os