Você está na página 1de 69

Android Terico Prtico

Instrutor
Recursos da Aplicao
Viso Geral
Os recursos de uma aplicao, como strings e imagens, devem
estar sempre internacionalizados, de modo que se possa dar
manuteno mais facilmente.

A internacionalizao tambm permite que um recurso


alternativo seja utilizado em dispositivos de configurao
diferente.

Todos os recursos internacionalizados devem estar no diretrio


/res da aplicao, dentro de subdiretrios especficos para
cada configurao.

.
Viso Geral
Para qualquer tipo de recurso, possvel definir um
arquivo padro e vrios outros alternativos:
O recurso alternativo utilizado sempre que corresponde
configurao do dispositivo.
O recurso padro utilizado quando nenhuma
configurao compatvel com o dispositivo.

.
Tipos de Recursos
Os seguintes recursos so suportados:
String
Drawable
Layout
Menu
Animation
Color/Color State
Style
ID
Bool
Integer/Integer Array
Dimension
Typed Array

.
Estrutura dos recursos
Na maioria so arquivos xml
So todos colocados no diretrio /res
Uma vez internacionalizados, os recursos podem
ser acessados por identificadores da classe R,
gerada automaticamente quando o projeto
compilado

Os recursos alternativos so definidos com


sufixos:
<nome_recurso>-<qualificador>

Em tempo de execuo o sistema Android


seleciona o recurso mais apropriado para o
dispositivo e sua configurao
Qualificadores
Exemplo de recurso padro e alternativo:
res/
drawable/
cone.png
background.png
drawable-hdpi/
cone.png
background.png

O qualificador hdpi indica os recursos que


devem ser utilizados em telas de alta resoluo
.
Qualificador Valores Descrio

MCC e MNC Exemplos: MCC significa Mobile Country Code e


mcc724 (Brasil) MNC Mobile Network Code. Ambos
mcc724-mnc005 (Claro no Brasil) podem vir gravados no SIM card e
mcc724-mnc010 (Vivo no Brasil) identificam o pais e a operadora
Linguagem e regio Exemplos: Utilizado para identificar lngua e
en regio
fr
en-rUS
fr-rFR
fr-rCA

Tamanho de tela small Utilizado para identificar o tamanho


normal da tela
large
xlarge
Aspecto de tela long Baseado na proporo da tela (uma
notlong long mais ampla). No est
relacionado com orientao
Orientao de tela port Identifica a orientao da tela
land (vertical ou horizontal)
Qualificador Valores Descrio

Modo dock car Descreve o tipo de dock no qual o


desk dispositivo foi colocado

Modo noturno night


notnight
Identifica modo noturno ou no

Densidade de tela em pixels (dpi) ldpi ldpi: aprox. 120dpi.


mdpi mdpi: aprox. 160dpi.
hdpi hdpi: aprox. 240dpi.
xhdpi xhdpi: aprox. 320dpi.
nodpi nodpi: no necessita ser utilizado em
uma tela de densidade especfica

Tipo de tela tctil notouch Identifica recursos de acordo com o


stylus tipo de tela tctil
finger

Disponibilidade de teclado keysexposed Identifica o tipo de teclado utilizado


keyssoft no dispositivo (hardware/software)
Qualificador Valores Descrio

Mtodo primrio de entrada de texto nokeys Identifica recursos de acordo com o


qwerty teclado disponvel
12key
Disponibilidade de tecla de navexposed Identifica se as teclas de navegao
navegao navhidden esto disponveis para o usurio ou
no
Mtodo primrio de navegao (no nonav Identifica se o dispositivo tem algum
touchscreen) dpad mtodo de navegao que no seja
trackball touchscreen
wheel
Verso de platforma (nivel de API) Exemplos: Identifica recursos de acordo com o
v5 nivel de API
v8
v10
etc.
Regras dos qualificadores
Os qualificadores devem estar presentes na ordem em
que aparecem na tabela
Errado: drawable-hdpi-port/
Correto: drawable-port-hdpi/
Qualificadores podem ser escritos em letras maisculas
ou minsculas
Um recurso admite s um valor de cada tipo de
qualificador
Errado: /drawable-rES-rFR
Correto: /drawable-rES e /drawable-rFR
Como o Android encontra o melhor recurso
para meu dispositivo?
Assumimos a seguinte estrutura de diretrio drawable:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

E um dispositivo com as seguintes configuraes:


Localidade = en-GB
Orientao de tela = port
Densidade de pixel da tela = hdpi
Tipo de tela tctil = notouch
Mtodo primrio de entrada de texto = 12key

O recurso escolhido por ordem de prioridade ser o que est no


diretrio:
drawable-en-port/
.
Acessando Recursos
Uma vez internacionalizados, os recursos podem ser acessados por
identificadores da classe R, gerada automaticamente quando o projeto
compilado

Cada tipo de recurso tem uma subclasse dentro de R e para cada recurso um
inteiro criado:
Ex. R.drawable.icon

O nome do recurso pode ser o nome do arquivo ou valor definido no XML

O recurso pode ser acessado de duas maneiras:


Via cdigo R.string.hello
Via XML - @string/hello
Exerccio rpido
Criar um novo layout com qualificadores (New > Android XML file)
Country code, Network code, Language, Density
O arquivo
AndroidManifest.xml
AndroidManifest.xml
Arquivo localizado na raiz
do projeto

Prov informaes essenciais


para que o sistema operacional
comece uma aplicao:
descreve os componentes de sua aplicao
define o pacote de sua aplicao
define a API na qual sua aplicao foi desenvolvida
Exemplo
<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="1" android:versionName="1.0"
package="com.empty" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="10"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:label="@string/app_name" android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".MyService"/>
</application>
</manifest>
Convenes do AndroidManifest.xml
No possvel agregar tags ou atributos indefinidos pelo sistema
As tags <manifest> e <application> so as nicas
obrigatrias
Elementos de mesmo nvel no tm ordem especfica, com
exceo da tag <activity-alias>
Todos os atributos tm o prefixo android:, com exceo de
alguns atributos da tag <manifest>
Barras inversas so utilizadas para caracteres de escape como
\\n para nova linha
Tag Manifest
Principais atributos:
namespace define o espao de nomes android
package nome completo do pacote da aplicao,
necessita ser nico
versionCode nmero da verso. Deve ser
crescente
versionName representao textual da verso, ex.
2.01
installLocation local de instalao
internalOnly, preferExternal, auto
Tag Manifest

Exemplo:

<?xml version="1.0" encoding="UTF-8"?>


<manifest android:versionCode="3" android:versionName="1.2"
package="com.mypackage" android:installLocation="preferExternal"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
....
</application>
</manifest>
Tag Aplicao
Atributos principais:
debuggable habilita/desabilita a depurao
description descrio da aplicao
icon e label cone e nome que sero exibidos para
o usurio
permission permisso necessria para que os
usurios interajam com a aplicao
persistent determina se a aplicao deve
eventualmente morrer ou no
Tag Aplicao
Exemplo
<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="3" android:versionName="1.2">
....
<application android:icon="@drawable/icon"
android:label="@string/app_name" android:debuggable="true"
android:persistent="true" android:description="@string/description"
android:permission="android.permission.AUTHENTICATE_ACCOUNTS">
....
</application>
</manifest>
Declarando Componentes
Componentes fundamentais de uma aplicao
Android:
Activity componente que interage com o usurio,
tem UI
Service realiza operaes custosas como acesso ao
banco de dados e I/O
Broadcast Receiver recebe eventos do sistema, ex.
bateria fraca, chamada perdida, carto SD removido
Content Provider prov acesso s informaes, ex.
banco de dados, contatos
Declarando Componentes
Exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="3" android:versionName="1.2">
package="com.project"
mlns:android="http://schemas.android.com/apk/res/android">
....
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:label="@string/app_name"
android:name=".MainActivity"/>
<service android:name=".MyService"/>
<receiver android:name=".MyReceiver"/>
<provider android:authorities="com.project.myprovider"
android:name=".MyProvider"/>
</application>
</manifest>
Intent
Activity, service e broadcast receiver so ativados por intents
Um intent descreve uma determinada ao e contm as
informaes necessrias para execut-la
Quando se dispara um intent, o sistema Android localiza o
componente desejado e passa o prprio intent como parmetro

Exemplo:

public class MainActivity extends Activity {


....
Intent intent = new Intent(getApplicationContext(), MyActivity.class);
startActivity(intent);
}
Intent Filter
Especifica os tipos de intents aos quais um componente (activity,
service ou receiver) pode responder
category informaes adicionais sobre o componente
action determina a ao que ser executada

Exemplo:
<manifest android:versionCode="3" android:versionName="1.2">
....
<activity android:label="@string/app_name" android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</manifest>
Recursos
Alguns atributos tm valores que sero exibidos ao usurio e por isso
devem estar localizados
Esses valores so expressos da seguinte maneira:
@[package:]type:name
O pacote pode ser omitido caso o recurso esteja definido no mesmo
pacote da aplicao

Exemplo:

<application android:icon="@drawable/icon_application"
android:label="@com.mypackage:string/app_name">
cones e Labels
Alguns elementos tm atributos de cone e label
cone e label definidos em um elemento se tornam padro para
todos seus filhos, quando aplicvel

Exemplo:
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".MyService" android:label="@string/service_name"/>
<activity android:name=".MyActivity"/>
<receiver android:name=".MyReceiver"/>
</application>

Os componentes sem labels definidos exibiro o label da aplicao


Permisses
Impe restrio de acesso aos dados, componentes e features do
dispositivo. Ex.: enviar SMS
O elemento <uses-permission> declara que a aplicao
necessita de determinada permisso
<uses-permission android:name="android.permission.BLUETOOTH"/>

O elemento <permissions> define uma nova permisso


<permission android:name="mypackage.NEW_PERMISSION"
android:protectionLevel="signature"/>
Permisses
Quatro tipos de permisses:
normal concedido pelo sistema automaticamente
dangerous notifica o usurio durante a instalao.
Pode ser concedida ou no
signature concedido para aplicaes com a mesma
assinatura de quem definiu a permisso. Utilizado
para proteger componentes. Usurio no
notificado
signatureOrSystem uso interno do sistema
Permisses
Protegendo um componente com permisses:
Primeiramente declaramos a permisso e solicitamos
acesso. O componente exige a mesma permisso para ser
acessado
S aplicaes com a nova permisso e com a mesma
assinatura interagem com o componente
<permission android:name="mypackage.NEW_PERMISSION"
android:protectionLevel="signature"/>
<uses-permission android:name="mypackage.NEW_PERMISSION"/>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".MyActivity"
android:permission="mypackage.NEW_PERMISSION"/>
</application>
Feature
O elemento <uses-feature> determina que caractersticas do
dispositivo a aplicao usa
Sua aplicao ficar disponvel no Android Market/Google Play
somente para os dispositivos que tenham as features exigidas

Exemplo:
<uses-feature android:required="true"
android:name="android.hardware.camera"/>
<uses-feature android:required="false"
android:name="android.hardware.camera.flash"/>
Suportando Diferentes Telas
As telas dos dispositivos Android tm diferentes
caractersticas de tamanho e densidade
O elemento <supports-screen> indica quais telas sua
aplicao suporta:

<supports-screens android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
Suportando Diferentes Telas
Sua aplicao estar disponvel no Android Market/Google
Play somente para dispositivos suportados.

Baixa densidade Densidade Alta densidade (240) Extra alta


(120) Ldpi Normal hdpi densidade
(160) mdpi (320) xhdpi
Tela pequena 240x320 ? ?
Tela Normal 240x400 320x480 480x800 ?
240x430 480x854
Tela Grande ? 540 x 960 ?

Tela Extra 1280x800 ?


Grande
Suportando Diferentes Telas

Aplicao sem suporte a diferentes densidades

Aplicao com suporte a diferentes densidades

images under Apache 2.0 license.


Definindo nvel de API
Elemento <uses-sdk> define com quais plataformas Android sua
aplicao ser compatvel
minSdkVersion plataforma mnima para que sua aplicao
funcione corretamente
targetSdkVersion plataforma na qual sua aplicao foi
desenvolvida
maxSdkVersion indica a plataforma mxima que sua aplicao
suporta. No recomendvel usar

<uses-sdk android:minSdkVersion="7"
android:TargetSdkVersion="10"/>
Bibliotecas
Uma aplicao Android est ligada por padro biblioteca que contm
todos os pacotes android.*
Alguns pacotes esto em bibliotecas diferentes como Google Maps
Elemento <uses-library> indica que a aplicao necessita estar
ligada a uma biblioteca

Exemplo:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.package" android:versionCode="1"
android:versionName="1.0">
<uses-library android:name="com.google.android.maps"/>
...
</manifest>
Exerccio rpido
Usem a Snippets View para adicionar a uma Activity:
Categoria: Web and Web Services
Snippet: Send an email

Resultado: isto alterar o AndroidManifest.xml (prestem


ateno s diferenas nas permisses declaradas).
Intents
Conceitos
Activities, Services e Broadcast Receivers so ativados atravs
de mensagens

Possibilitam a comunicao entre componentes de uma mesma


aplicao ou entre aplicaes diferentes

Tais mensagens so denominadas Intents (intenes)

.
Enviando Intents
Activities:
permitem que Activities sejam carregadas ou exigem uma nova
ao para uma Activity j aberta

Formas de Acceso
startActivity() [sem retorno]
Entrega o controle para a Activity criada

Activity 1 Activity 2

Usurio interage com a


tela 1
startActivity

Usurio interage com a


tela 2
Enviando Intents
Activities:
startActivityForResult() [retorno - Struts]
permite que o componente que envia o Intent aguarde pelo

retorno da Activity chamada


setResult e onActivityResult

Activity 1

Usurio interage com a Activity 2


tela 1
startActivityForResult

Usurio interage com a


tela 2

setResult
Mtodo chamado:
onActivityResult
Enviando Intents
Services:
permitem iniciar um servio ou solicitar novas operaes para
um servio em execuo

ServiceConnection Service

Formas de Acesso [em ordem]


bindService()
bindService

Conecta em um servio em execuo


Registra para ouvir startService

onServiceConnected onServiceConnected

onServiceDisconnected
onServiceDisconnected
startService()
Cria um novo servio baseado no Intent enviado como
parmetro
Enviando Intents
Broadcast Receivers:
permitem iniciar a execuo de tarefas registradas em broadcast
receivers
Sistema
BroadcastReceivers

Evento : bateria fraca

Formas de Acesso sendBroadcast

sendBroadcast() Mtodo
onReceive
chamado
Envia um Intent para broadcast receivers registrados

//exemplo de evento enviado pelo sistema Android


Intent iBroad = new Intent();
iBroad.setAction("android.intent.action.BATTERY_LOW");
sendBroadcast(iBroad);
Enviando Intents
Intents s so recebidos por componentes para os quais foram
enviados

Intents enviados para Activities s sero recebidos por Activities.


Da mesma maneira ocorre com Services e Broadcast Receivers
Objetos de Intent
Corresponde a um conjunto de informaes relevantes ao Intent
Component Name (opcional)
Ex: com.example.project.app.FreneticActivity

Action
Uma string que d nome ao que ser realizada pelo Intent
Qualquer string pode ser usada em Action mas costuma-se utilizar
como padro:
android.intent.action.VIEW
Objetos de Intent Aes
Alguns exemplos (constantes):
ACTION_CALL Iniciar chamada telefnica
ACTION_EDIT Mostrar dados que sero editados pelo usurio
ACTION_MAIN Iniciar a Activity inicial de uma tarefa, sem
entrada de dados de retorno
ACTION_SYNC Sincronizar dados do servidor para um
dispositivo mvel
ACTION_BATTERY_LOW Indicar bateria baixa
ACTION_HEADSET_PLUG Um headset foi conectado ou desconectado

ACTION_SCREEN_ON A tela foi ligada

ACTION_TIMEZONE_CHANGED Configuraes de fuso horrio foram alteradas


Objetos de Intent
Data (Dados)
Formado por uma URI e um tipo MIME
URI: scheme://host:port/path
MIME type: video/mpeg
Category

String contendo informaes adicionais sobre o tipo de componente


que deveria receber este Intent
Qualquer string pode ser usada em Category mas somente pode ser

utilizada como padro:


android.intent.category
Objetos de Intent Categorias
Alguns exemplos (constantes):
CATEGORY_BROWSABLE A activity objetivo pode ser invocada com
segurana pelo browser para mostrar dados
referenciados por um link (ex, imagem)
CATEGORY_GADGET A activity pode ser embarcada dentro de outra
Activity que mantm gadgets
CATEGORY_HOME A activity mostra a Home screen, a primeira
tela que o usurio v quando o dispositivo
acionado/ligado ou quando a tecla HOME
pressionada
CATEGORY_LAUNCHER A activity pode ser a Activity inicial de uma
tarefa e mostrada na lista de carregamento
de aplicaes
CATEGORY_PREFERENCE A activity objetivo um painel de preferncias
Objetos de Intent
Extras (mtodos putExtra e getExtras)
Par chave-valor contendo informaes adicionais
(ex.: intent enviar correio android.intent.extra.EMAIL, SUBJECT, TEXT)
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"to@email.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hello!");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hello, MOTO!");

Flags
Aes extras que permitem ao sistema definir um comportamento
especfico para cada Intent

Valor inteiro definido por constantes como esta:

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
Resoluo de Intents
Intents Explcitos
Component Name determina quem ser notificado

Intents Implcitos
Sistema Android responsvel por determinar quem deve
receber o Intent utilizando Intent Filters
Component Name vazio

Declarar Intent Filters no AndroidManifest.xml:

Ao
Dados (URI e MIME type)
Categoria
Resoluo de Intents Explcitos
Ativando uma Activity atravs de Intent Explcito (tem acesso Java)
//Activity destino definida atravs da classe do objeto
Intent iExplicity = new Intent(IntentTest.this, ExplicityActivity.class);

//Enviando solicitao
startActivity(iExplicity);

Ativando uma Activity atravs de Intent Explcito (pacote)


//Opcionalmente passando pacote e classe atravs de strings
Intent iExplicity = new Intent(IntentTest.this);
iExplicity.setClassName("com.myapp.test",
"com.myapp.test.ExplicityActivity");

//Enviando solicitao
startActivity(iExplicity);
Filtros de Intents
Filtros que permitem decidir se um determinado Intent deve
acionar um componente

Tipos
Objeto IntentFilter (cdigo Java)
Elemento <intent-filter> (AndroidManifest.xml)

Dados Provados
Ao
Categoria

Dados
Filtros de Intents
Sistema Android Activity 1 disponvel
(Resoluo) (declarao intent-filter em
XML)
- Algumas aes
- Algumas categorias
(Chamada Java) - Alguns dados
Intent
-1 action -Se e somente se:
-Algumas categorias -Prova ao PASSA &&
- Alguns dados - Prova categoria PASSA && ...
-Prova dados PASSA = Activity N disponvel
Activity pode ser chamada (intent-filter XML)

O mesmo processo se
aplica a:
-Services
-Broadcast Receivers Filtra
1 ou mais Activities que cumpram
os requisitos
Filtros de Intents
Se mais de um filtro encontrado para um Intent, o usurio
ser questionado sobre qual deseja abrir

Se nenhum filtro encontrado, uma exceo ser lanada

Exemplo de exceo:
android.content.ActivityNotFoundException:
No Activity found to handle Intent { act=android.intent.action.IMP_TEST
cat=[android.intent.category.TESTABLE] }
Filtros de Intents
Prova de Ao
<intent-filter . . . >
<action android:name="com.example.project.SHOW_CURRENT" />
<action android:name="com.example.project.SHOW_RECENT" />
<action android:name="com.example.project.SHOW_PENDING" />
. . .
</intent-filter>

Intent iImplicity = new Intent();


iImplicity.setAction(com.example.project.SHOW_RECENT");
startActivity(iImplicity);

Condies:

Intent deve conter 1 ao correspondente ao Filtro para que a prova PASSE


Filtro sem aes, a prova FALHA
Intent sem ao, prova PASSA se o Filtro tem pelo menos 1 ao
Filtros de Intents
Prova de Categoria
<intent-filter . . . >
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.PREFERENCE/>
. . .
</intent-filter>

Intent iImplicity = new Intent();


iImplicity.addCategory("android.intent.action.BROWSABLE"); PASSA
startActivity(iImplicity);

Condies:
Todas as categorias do Intent devem ter correspondncia no Filtro para
que a prova PASSE (subconjunto)
Filtro pode conter categorias adicionais
Filtros de Intents
Prova de Categoria
<intent-filter . . . >
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.PREFERENCE/>
. . .
</intent-filter>

Intent iImplicity = new Intent();


iImplicity.addCategory("android.intent.action.BROWSABLE");
iImplicity.addCategory("android.intent.action.OTHER"); FALHA

startActivity(iImplicity);

Condies:
Todas as categorias do Intent devem ter correspondncia no Filtro para
que a prova PASSE (subconjunto)
Filtro pode conter categorias adicionais
Filtros de Intents
Prova de Categoria

Activities devem conter, ao menos, uma categoria


android.intent.category.DEFAULT, uma vez que o Sistema Android
considera que todo Intent enviado atravs de startActivity() tem esta
categoria

Excees:
Activities que tm em seus filtros:
android.intent.action.MAIN
android.intent.category.LAUNCHER
no necessitam ter android.intent.category.DEFAULT
Filtros de Intents
Prova de Data (dados)
<intent-filter . . . >
<data android:mimeType="video/mpeg" android:scheme="https android:host="com.example/>
<data android:mimeType="audio/mp3" android:scheme="http android:host="com.example2 />
. . .
</intent-filter>

Intent iImplicity = new Intent();


iImplicity.setDataAndType(Uri.parse("http://com.example:200"),video/mpeg"); FALHA

Cada tag Data descreve uma URI e um tipo de dado


URI:

No so todos obrigatrios, mas dependem entre si


host e port (authority) dependem de scheme
path depende de scheme e authority
URI: scheme://host:port/path
Filtros de Intents
Prova de Data (dados)

mimeType corresponde ao tipo de dado passado pelo Intent


Path e mimeType podem conter caractere asterisco (*)

text/* possibilitaria que qualquer formato do tipo texto passe na prova

Condies:
Para que a prova PASSE s necessrio que os atributos mencionados no
Filtro correspondam ao Intent
Filtros de Intents
Tabela de casos de sucesso em provas do tipo Data (dados):

Intent Filtro Sucesso


(chamada em cdigo) (declarao em XML)
Sem URI / Sem MIME Type Sem URI / Sem MIME Type OK
Sem URI URI FALHA
URI URI OK
MIME Type URI FALHA
MIME Type MIME Type OK
URI MIME Type FALHA
URI e MIME Type URI e MIME Type OK
URI URI e MIME Type FALHA
MIME Type e URI (content: ou file:) MIME Type OK
Intent Implcito
AndroidManifest.xml
<activity android:name="com.myapp.test.ImplicityActivity">
<intent-filter>
<action android:name="android.intent.action.CALL_IMPLICITY" />
<action android:name="android.intent.action.OTHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.TESTABLE" />
<data android:scheme="http"/>
<data android:host="com.example.project"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>

Cdigo Java
Intent iImplicity = new Intent();
iImplicity.setAction("android.intent.action.CALL_IMPLICITY");
iImplicity.addCategory("android.intent.category.TESTABLE");
iImplicity.setDataAndType(Uri.parse("http://com.example.project:200"),
"text/plain");
startActivity(iImplicity);
Exemplo
Abrir instncia do browser passando uma URL
String url = "http://www.eldorado.org.br";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i); //chama como padro com categoria android.intent.category.DEFAULT

Filtro usado pela aplicao do navegador


<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
Atividade Prtica
Utilizando os passos dentro do projeto, resolvam os exerccios propostos
abaixo:

Parte 1: Intent Explcito

Parte 2: Intent Implcito

Parte 3: Iniciar Navegador atravs de Intent

Parte 4: Iniciar Broadcast Receiver atravs de Intent

Parte 5: Iniciar Service atravs de Intent

Intents Especiais
Aplicaes que podem ser carregadas atravs do Menu Principal tm
o intent-filter abaixo para sua Activity principal:
<intent-filter . . . >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

O Sistema Android lista todas Activities que tm


android.intent.action.MAIN e android.intent.category.LAUNCHER
para criar a lista de aplicaes que podem ser carregadas pelo usurio
atravs da aplicao Launcher
Intents Especiais
Intent-filter contendo android.intent.category.HOME para carregar a
aplicao principal do dispositivo mvel (Home)

Dica: Buscas pelos Intent-Filters disponveis podem ser feitas pelo


usurio utilizando do componente PackageManager (muito importante:
se no tem informao do AndroidManifest ou documentao)
queryIntentActivities()
queryIntentServices()
queryBroadcastReceivers()
Links para consulta
http://developer.android.com/index.html
http://developer.android.com/training/index.html
(tutoriais)
https://www.google.com/ (para blogs no geral)

.
Referncias

http://developer.android.com/guide/topics/resource
s/index.html
http://developer.android.com/guide/topics/manifest
/manifest-intro.html
http://developer.android.com/guide/practices/scree
ns_support.html