Você está na página 1de 17

Componentes de aplicaao

Framework de aplicaes do Android permite criar aplicativos ricos e inovadores utilizando um


conjunto de componentes reutilizveis. Esta seo explica como voc pode construir os
componentes que definem os blocos de construo do seu aplicativo e como conect-los em
conjunto, utilizando os Intents.

Intents e Intents filters


Uma Inteno um objeto de mensagens que voc pode usar para solicitar uma ao de um
outro componente aplicativo . Embora as intenes facilitar a comunicao entre os
componentes de vrias maneiras, h trs casos de uso fundamentais:

Para iniciar uma atividade:

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.

Para iniciar um servio:

Um servio um componente que executa operaes em segundo plano, sem uma


interface de usurio. Voc pode iniciar um servio para executar uma operao one-time
(como baixar um arquivo) passando um Intent para StartService () . A Inteno descreve o
servio para iniciar e carrega todos os dados necessrios.
Se o servio projetado com uma interface cliente-servidor, voc pode ligar para o servio
de outro componente passando um Intent para bindService () . Para mais informaes,
consulte o Servio de guia.

Para entregar uma transmisso:

A transmisso uma mensagem de que qualquer aplicativo pode receber. O sistema


oferece vrias transmisses de eventos do sistema, como quando o sistema inicializado
ou o dispositivo comea a carregar. Voc pode entregar uma transmisso para outros
aplicativos passando um Intent para sendBroadcast () , sendOrderedBroadcast () , ou
sendStickyBroadcast () .

Tipos de Inteno
Existem dois tipos de intenes:

Intenes explcitas: Especificar o componente para comear pelo nome (o nome da


classe totalmente qualificado). Voc normalmente usar uma inteno explcita para
iniciar um componente em seu prprio aplicativo, porque voc sabe o nome da classe
da atividade ou servio que voc deseja iniciar. Por exemplo, iniciar uma nova

atividade em resposta a uma ao do usurio ou iniciar um servio para baixar um


arquivo em segundo plano.
Intenes implcitas: No nomear um componente especfico, mas em vez declarar
uma ao geral a realizar, o que permite que um componente de outro aplicativo para
lidar com isso. Por exemplo, se voc quer mostrar ao usurio uma localizao em um
mapa, voc pode usar uma inteno implcita de solicitar que outro aplicativo capaz
mostrar um local especfico em um mapa.

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.

Construir uma Intent


Uma Inteno objeto carrega a informao de que o sistema Android utiliza para determinar
qual componente para comear (como o nome exato do componente ou categoria de
componentes que devem receber a inteno), alm de informaes que o componente
destinatrio usa a fim de executar corretamente a ao (como a ao a ser tomada e os dados
para agir).
A informao primria contida em uma Inteno o seguinte:
Nome do componente
O nome do componente para iniciar.
Isto opcional, mas a pea fundamental de informao que faz com que uma
inteno explcita , o que significa que a inteno deve ser entregue somente ao
componente aplicativo definido pelo nome do componente. Sem um nome de
componente, a inteno implcito eo sistema decide qual componente deve receber
a inteno com base em outras informaes inteno (como a ao, dados e abaixo
descrito-categoria). Ento, se voc precisa para comear um componente especfico
em seu aplicativo, voc deve especificar o nome do componente.
Nota: Ao iniciar um servio , voc deve sempre especificar o nome do componente .
Caso contrrio, voc no pode ter certeza de que o servio ir responder inteno, e
que o usurio no pode ver que o servio ser iniciado.
Este campo da Inteno uma ComponentName objeto, que voc pode especificar
usando um nome do componente de destino de classe totalmente qualificado,
incluindo o nome do pacote do aplicativo. Por exemplo, com.example.ExampleActivity
. Voc pode definir o nome do componente com setComponent () , SetClass () ,
setClassName () , ou com a inteno construtor.
Ao
Uma string que especifica a ao genrica para executar (como vista ou escolher ).
No caso de uma inteno de difuso, esta a ao que ocorreu e est sendo relatada.
A ao determina em grande parte como o resto da inteno est estruturado,
particularmente o que est contido nos dados e extras.
Voc pode especificar suas prprias aes para o uso por intenes dentro do seu
aplicativo (ou para uso por outros aplicativos para invocar componentes em seu
aplicativo), mas voc normalmente deve usar constantes de ao definidos pela

Inteno de classe ou outras classes de enquadramento. Aqui esto algumas aes


comuns para comear uma atividade:
ACTION_VIEW
Use esta ao em uma inteno com startActivity () quando voc tem alguma
informao que uma atividade pode mostrar para o usurio, como uma foto para ver
em um aplicativo de galeria, ou um endereo para ver em um aplicativo de mapa.
ACTION_SEND
Tambm conhecido como o "share" inteno, voc deve usar isso em uma inteno
com startActivity () quando voc tem alguns dados que o usurio pode compartilhar
atravs de outro aplicativo, como um aplicativo de e-mail ou aplicativo de
compartilhamento social.
Veja a Inteno referncia de classe para mais constantes que definem aes
genricas. Outras aes so definidas em outros lugares do quadro Android, como em
configuraes para as aes que se abrem telas especficas no aplicativo Configuraes
do sistema.
Voc pode especificar a ao de uma inteno com setAction () ou com um Inteno
construtor.
Se voc definir suas prprias aes, no se esquea de incluir o nome do pacote do seu
aplicativo como um prefixo. Por exemplo:
static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL";

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:

static final String EXTRA_GIGAWATTS = "com.example.EXTRA_GIGAWATTS";

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);

A Inteno (Contexto, Class) construtor fornece o aplicativo Contexto eo componente de uma


classe de objeto. Como tal, esta inteno comea explicitamente a DownloadService classe no
aplicativo.
Para mais informaes sobre a construo e iniciar um servio, consulte o Servios de guia.
Exemplo inteno implcita
Uma inteno implcita especifica uma ao que pode invocar qualquer aplicativo no
dispositivo capaz de executar a ao. Usando uma inteno implcita til quando o aplicativo
no pode executar a ao, mas outros aplicativos provavelmente pode e que voc gostaria que
o usurio escolha qual aplicativo para usar.
Por exemplo, se voc tiver contedo que voc deseja que o usurio para compartilhar com
outras pessoas, criar uma inteno com a ACTION_SEND ao e adicionar extras que
especificam o contedo para compartilhar. Quando voc chamar startActivity () com essa
inteno, o usurio pode escolher um aplicativo atravs do qual a compartilhar o contedo.
Ateno: possvel que um usurio no ter quaisquer aplicativos que lidam com a inteno
implcita que voc enviar para startActivity () . Se isso acontecer, a chamada ir falhar e seu

aplicativo ir falhar. Para verificar se uma atividade receber a inteno, chamar


resolveActivity () em seu Inteno objeto. Se o resultado for no-nulo, ento h pelo menos
um aplicativo que pode lidar com a inteno e que seguro para chamar startActivity () . Se o
resultado for nulo, voc no deve usar a inteno e, se possvel, voc deve desabilitar o
recurso que emite a inteno.
// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType(HTTP.PLAIN_TEXT_TYPE); // "text/plain" MIME type

// Verify that the intent will resolve to an activity


if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);

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);
...

// Always use string resources for UI text.


// This says something like "Share this photo with"
String title = getResources().getString(R.string.chooser_title);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, title);

// Verify the intent will resolve to at least one activity


if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);
}

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.

Receber uma Inteno Implcito


Para anunciar que as intenes implcitas seu aplicativo pode receber, declarar um ou mais
filtros de inteno para cada um de seus componentes de aplicativos com um <intent-filter>
elemento em seu arquivo de manifesto . Cada filtro inteno especifica o tipo de intenes
aceita baseada na ao da inteno, dados e categoria. O sistema ir fornecer uma inteno
implcita ao seu componente aplicativo s se a inteno pode passar atravs de um dos seus
filtros de inteno.
Nota: Uma inteno explcita sempre entregue ao seu alvo, independentemente de qualquer
inteno filtra o componente declara.
Um componente aplicativo deve declarar filtros separados para cada trabalho nico que pode
fazer. Por exemplo, uma atividade em um aplicativo galeria de imagens pode ter dois filtros:
um filtro para exibir uma imagem, e um outro filtro para editar uma imagem. Quando a

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

android:name = "ShareActivity" >

<intent-filter>
<action

android:name = "android.intent.action.SEND" />

<category
<data

android:name = "android.intent.category.DEFAULT" />

android:mimeType = "text/plain" />

</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.

Restringir o acesso a componentes


Usando um filtro de inteno no uma forma segura para evitar que outros aplicativos de
iniciar os seus componentes. Embora os filtros inteno restringir um componente para
responder a apenas determinados tipos de intenes implcitas, outro aplicativo pode
potencialmente iniciar seu componente aplicativo usando uma inteno explcita se o
desenvolvedor determina os nomes dos componentes. Se importante que apenas o seu
prprio aplicativo capaz de iniciar um de seus componentes, defina o exportado atributo de
"false" para esse componente.
Uma inteno implcita testado contra um filtro comparando a inteno de cada um dos trs
elementos. Para ser entregue ao componente, a inteno tem de passar todos os trs testes.
Se ele no corresponder, mesmo um deles, o sistema Android no vai entregar a inteno de o
componente. No entanto, porque um componente pode ter vrios filtros de inteno, uma
inteno que no passa atravs de um dos filtros de um componente pode faz-lo atravs de
outro filtro. Mais informaes sobre como o sistema resolve intenes fornecido na seo
abaixo sobre Inteno resoluo .
Ateno: Para evitar a execuo acidental de um aplicativo diferente Servio , use sempre uma
inteno explcita para iniciar seu prprio servio e no declarar filtros de inteno para o seu
servio.
Nota: Para todas as atividades, voc deve declarar seus filtros inteno no arquivo de
manifesto. No entanto, os filtros para receptores de radiodifuso podem ser registrados de
forma dinmica chamando registerReceiver () . Voc pode, ento, cancelar o registro do
receptor com unregisterReceiver () . Isso permite que seu aplicativo para ouvir transmisses
especficas durante apenas um determinado perodo de tempo, enquanto o aplicativo est
sendo executado.
Exemplo filtros
Para entender melhor alguns dos comportamentos de filtro inteno, olhar para o seguinte
trecho do arquivo de manifesto de um aplicativo de compartilhamento social.
<activity android:name="MainActivity">
<!-- This activity is the main entry, should appear in app launcher
-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<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>

A primeira atividade, MainActivity , o principal ponto de entrada da atividade do aplicativo


que se abre quando o usurio inicialmente lana o aplicativo com o cone do lanador:

O ACTION_MAIN ao indica que este o principal ponto de entrada e no espera


quaisquer dados inteno.
O CATEGORY_LAUNCHER categoria indica que cone deste atividade deve ser colocado
em lanador de aplicativos do sistema. Se o <activity> elemento no especificar um
cone com cone , o sistema usa o cone do <application> elemento.

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

A PendingIntent objeto um wrapper em torno de uma Inteno objeto. O objetivo principal


de um PendingIntent conceder permisso a um aplicativo externo para usar o contido
Inteno como se fosse executado a partir de processo prprio de seu aplicativo.
Os principais casos de uso para uma inteno pendentes incluem:

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:

PendingIntent.getActivity () para uma Inteno que inicia uma atividade .


PendingIntent.getService () para uma Inteno que inicia um servio .
PendingIntent.getBroadcast () para um Inteno que inicia uma BroadcastReceiver .

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

As sees a seguir descrevem como um intenes so compatveis com o componente (s)


apropriado em termos de como o filtro inteno declarado no arquivo de manifesto de um
aplicativo.

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

Neste URI, o esquema o contedo , o anfitrio com.example.project , a porta 200 , eo


caminho pasta / subpasta / etc .
Cada um destes atributos opcional num <dados> elemento, mas existem dependncias
lineares:

Se um esquema no for especificado, o host ignorado.


Se um host no for especificado, a porta ignorado.
Se tanto o esquema e host no for especificado, o caminho ignorado.

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:

Se um filtro especifica apenas um esquema, todas as URIs com esse esquema de


coincidir com o filtro.
Se um filtro especifica um esquema e uma autoridade, mas nenhum caminho, todos os
URIs com o mesmo esquema e autoridade passar o filtro, independentemente de seus
caminhos.
Se um filtro especifica um esquema, uma autoridade, e um caminho, apenas URIs com
o mesmo esquema, autoridade e caminho passar o filtro.

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

nicos que podem responder. H um mtodo semelhante, queryBroadcastReceivers () , para


receptores de radiodifuso.

Você também pode gostar