Escolar Documentos
Profissional Documentos
Cultura Documentos
Diego Bezerra
Ambiente de desenvolvimento
Introduo
Inicialmente o desenvolvimento era especfico para cada dispositivo mvel As plataformas evoluram com o tempo (Symbian)
Maior
MIDlets (JVM)
Acesso
Introduo
completas Mquina Virtual (dalvik) construda sobre um kernel Linux. Aplicaes nativas podem ser substitudas
Introduo
Aplicaes nativas
Cliente SMS Player
de email de msica
Introduo
a wi-fi e rede de dados Sistema de localizao Acesso a sensores Cmera Audio IPC Google maps
Introduo
Introduo
Introduo
sistema Android gerencia o ciclo de vida das aplicaes Gerenciamento baseado em prioridades
Sistema poderoso e simples Documentao muito boa Comunidade ativa Sem taxas para desenvolvimento Android market
A plataforma de desenvolvimento
Cada aplicao executada em um processo separado Dalvik interage com o Kernel Linux
A plataforma de desenvolvimento
Ferramentas de desenvolvimento
Compilador,
depurador, logcat
Bibliotecas Android
android.util
android.os
android.view
android.widget
Elementos de UI
Monitorar chamadas
android.telephony
android.location
GPS
e localizao GSM
camera
android.bluetooth
Foreground Activity
Jogos,
mapas, browser
Background Service
SMS,
alarmes de msica
Intermittent Activity
Player
Criar uma aplicao (Hello World) utilizando o eclipse Utilizar o Emulador Utilizar logcat Utilizar depurao Verificar instalador (apk)
Compila o projeto e cria um executvel .dex Empacota o executvel e arquivos de recurso em um instalador (apk) Inicia o emulador (se ainda no tiver sido iniciado) Instala a aplicao no emulador Inicia a aplicao
Activity
onCreate chamado na criao da Activity setContentView cria a UI a partir de um xml UI pode ser criada a partir de um XML
Desacoplamento
da UI e do core
Exerccio
Tambm possvel criar UI diretamente no cdigo (embora no recomendado) O Eclipse + ADT ajuda na criao de UI
Pouca memria RAM Pouca memria de armazenamento Pouco poder de armazenamento Tela pequena Custo de transferncia de dados Bateria
Arquivo Manifest
Todo projeto Android possui em sua raiz um arquivo AndroidManifest.xml Permite definir estrutura e metadados (icone, tema)
Main
Arquivo Manifest
application
S
pode haver um n desse tipo por arquivo manifest Possui atributos que definem cone, tema e ttulo Atua como container que inclui Activity, Service, Broadcast Receiver e Content Provider
activity
Requerida
para cada Activity presente na aplicao Usa-se o atributo android:name para definir o nome da classe A tentativa de inicializao de uma Activity que no est definida em um manifeste gera uma exceo Suporta a tag intent-filter
service
Requerido
para cada Service da aplicao Assim como Activities, tambm suporta as tags intentfilter
Tipicamente na forma
provider
Usado
receiver
Define
um Broadcast Receiver Permite que funcionem como listeners globais No necessitam que a aplicao seja iniciada para que funcionem
uses-permission
Faz
parte do modelo de segurana Define as permisses que sero apresentadas aos usurios no momento da instalao Define permisso de acesso a servios que incidam custo ou tenham implicaes de segurana
Exemplo de uso
<uses-permission android:name=android.permission.ACCESS_LOCATION> </uses-permission>
permission
Restringe
o acesso aplicao Outras aplicaes que necessitem usar o servio devem utilizar a tag uses-permission possvel especificar o nvel de acesso (normal, dangerous, signature, signatureOrSystem)
Exemplo de uso
<permission android:name=com.package.DETONATE_DEVICE android:protectionLevel=dangerous android:label=Self Destruct android:description=@string/detonate_description> </permission>
instrumentation
Prov
Exemplo de uso
<instrumentation android:label=My Test android:name=.MyTestClass android:targetPackage=com.package> </instrumentation>
Diferentemente de outros sistemas, as aplicaes Android no tm controle sobre seu ciclo de vida Os recursos podem ser tratados de forma agressiva de acordo com um sistema de prioridades Todas as aplicaes permanecero executando e na memria at que o Android necessite de recursos
Sistema de prioridades
A ordem em que o Android mata os processos para garantir recursos determinada pela prioridade das aplicaes
Sistema de prioridades
Active Processes
Aplicaes
usurio Activities em um estado ativo Activities, Services ou Broadcast Receivers que esto executando o mtodo onReceive Services que esto executando onStart, onCreate ou onDestroy
Sistema de prioridades
Visible Processes
Processos
em que a Activity est visvel, porm inativa Activities parcialmente encorbertas Sem interatividade com o usurio
Sistema de prioridades
iniciados Prioridade menor que Activity pois no interage com o usurio Ainda so considerados processos em foreground
Sistema de prioridades
Background Processes
Activities
no visveis e que no iniciaram Services Maioria dos processos matados pelo Android
Empty processes
Aplicaes
que o Android mantm na memria mesmo aps o fim de seu ciclo de vida para um reincio mais rpido
Externalizando recursos
sempre uma boa pratica manter os recursos externamente ao cdigo Android suporta externalizao de recursos
Strings,
Criando recursos
Os recursos da aplicao so armazenados no diretrio res/ na hierarquia do projeto Cada tipo de recurso pode ter um subdiretrio O plugin do eclipse (ADT) cria o diretrio res/ com os subdiretrios values/ drawable/ e layout/ Existem sete tipos de recursos separados por subdiretrios
values,
Criando recursos
Quando a aplicao construda os recursos so compilados A classe R criada contendo referncia para os recursos Os nomes dos arquivos devem conter apenas letras minsculas, ponto e underline
Os valores suportados incluem string, cores e dimenses Os valores so armazenados em arquivos XML no diretrio res/values O typo do dado armazenado indicado no XML Por conveno, os valores so separados em arquivos de acordo com o tipo
Strings
permitido usar tags HTML para estilo (apenas <b>, <i> e <u>)
<string name=stop_message><b>Stop.</b></string>
Colors
Usa-se a tag color para definir recursos de cores Usa-se o caractere # seguido pelos valores de alfa (opcional), red, green e blue Usa-se um ou dois hexadecimais
#RGB #RRGGBB #ARGB #ARRGGBB
<color name=opaque_blue>#00F</color> <color name=transparent_green>#7700FF00</color>
Dimensions
Comumente referenciado em recursos de estilo e de layout til para definir constantes para bordas, alturas e larguras, por exemplo Usa-se a tag dimen para se definir uma dimenso O valor deve ser seguido pela unidade
px
(pixels), in (inches), pt (points), mm (milmetros), dp (pixels independentes de densidade), sp (pixels independente de escala)
<dimen name=standard_border>5px</dimen> <dimen name=large_font_size>16sp</dimen>
Estilos e Temas
Permite manter um look and feel consistente O uso mais comum o armazenamento de cores e fontes das aplicaes O estilo pode ser mudado facilmente alterando o estilo no arquivo Manifest Usa-se a tag style
<?xml version=1.0 encoding=utf-8?> <resources> <style name=BaseText> <item name=android:textSize>14sp</item> <item name=android:textColor>#111</item> </style> </resources>
Drawables
Layouts
Permite definir a UI desacoplada do cdigo Depois de definido o layout pode ser inflado usando-se o mtodo setContentView Um layout pode ser referenciado dentro de outro Podem ser criados mais de um layout (mais de um arquivo xml). Isso facilita a mudana de hardware
Animations
Usa-se a tag anim As animaes podem ser combinadas com a tag set Outras possveis tags
duration
startOffset
Animations (tweened)
<?xml version=1.0 encoding=utf-8?> <set xmlns:android=http://schemas.android.com/apk/res/android android:interpolator=@android:anim/accelerate_interpolator> <rotate android:fromDegrees=0 android:toDegrees=360 android:pivotX=50% android:pivotY=50% android:startOffset=500 android:duration=1000 /> <scale android:fromXScale=1.0 android:toXScale=0.0 android:fromYScale=1.0 android:toYScale=0.0 android:pivotX=50% android:pivotY=50% android:startOffset=500 android:duration=500 />
Animations frame-by-frame
Diferentemente da animao tweened que armazenada no diretrio res/anim, a animao frame-by-frame armazenada no diretrio res/drawable
<animation-list xmlns:android=http://schemas.android.com/apk/res/android android:oneshot=false> <item android:drawable=@drawable/rocket1 android:duration=500 /> <item android:drawable=@drawable/rocket2 android:duration=500 /> <item android:drawable=@drawable/rocket3 android:duration=500 /> </animation-list>
<?xml version=1.0 encoding=utf-8?> <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation=vertical android:layout_width=fill_parent android:layout_height=fill_parent android:padding=@dimen/standard_border> <EditText android:id=@+id/myEditText android:layout_width=fill_parent android:layout_height=wrap_content android:text=@string/stop_message android:textColor=@color/opaque_blue /> </LinearLayout>
Exerccio
No exemplo criado, utilizar uma das cores providas pelo Android como cor de background
Uma das razes para externalizar recursos a seleo dinmica do Android possvel fazer a seleo de acordo com o local, a linguagem e o hardware Deve-se criar uma estrutura de diretrios dentro de res/ usando-se um para diferenciar a caracterstica
A seguinte estrutura mostra os diretrios para strings default, francs e francs canadense
res/ values/ strings.xml values-fr/ strings.xml values-fr-rCA/ strings.xml
Qualificadores disponveis
Linguagem:
etc) Regio: r seguido do cdigo de linguagem ISO 3166-1-alpha-2 (rCA, rUS, rGB, etc) Orientao da tela: port, land ou square Densidade de pixels da tela: quantidade de pixels seguido por dpi (96dpi, 112dpi) Tipo de touchscreen: notouch, stylus ou finger
Continuao
Qualificadores disponveis
Disponibilidade
do teclado: keysexposed ou keyshiden Tipo do teclado: nokeys, querty ou 12key Tipo de navegao: nokeys, trackball, dpad ou wheel Resoluo da tela: resoluo em pixels (240x320)
possvel usar qualificadores encadeados Deve-se seguir a sequncia descrita anteriormente Vlido
drawable-en-rUS drawable-en-keyshidden drawable-land-notouch-nokeys-320x240
Invlido
drawable-rUS-en (fora de ordem) drawable-rUS-rUK (valores mltiplos para o mesmo qualificador)
Exerccio
Crie um arquivo de string para portugus (pt) e altere o valor da mensagem do exemplo criado de acordo com a linguagem
Activity
Para criar UI de aplicaes deve-se herdar de Activity Cada Activity representa uma tela da aplicao Quanto mais complexa a aplicao mais Activities ela possuir
Activity
Activity
O cdigo anterior cria uma tela vazia Para criar uma tela til usa-se View
Mostram
Activity
Activity
Para utilizar uma Activity na aplicao necessrio adicion-la ao arquivo Manifest Deve ser adicionada dentro da tag application
<activity android:label=@string/app_name android:name=.MyActivity> <intent-filter> <action android:name=android.intent.action.MAIN /> <category android:name=android.intent.category.LAUNCHER /> </intent-filter> </activity>
Activity
Pilha de Activities
Activity
Visvel, com foco e com possibilidade de interagir com o usurio Paused: Visvel, mas sem foco. Parcialmente encobertas Stopped: Quando a Activity no est visvel Inactive: Quando a Activity matada e quando ela ainda no foi iniciada
As Activities podem reagir a mudanas de estado usando event handlers providos pelo Android
so as classes bsicas para elementos visuais de UI. Todos os controles de UI e classes de layout derivam de Views ViewGroups: so extenses da classe View que contm outros Views Activities: j descrito anteriormente
Android prov uma caixa de ferramentas contendo Views padres que ajudam na construo de UI simples
TextView,
Layouts
Exerccio
Adicione e
android:onClick="setColorToGreen"
Exerccio
Adicione um ID ao textView
android:id="@+id/MyTextView
Use findViewById para recuperar a instncia do TextView Use o mtodo setTextColor de TextView para alterar a cor do texto quando os botes forem apertados
Exerccio
Substitua os nomes dos botes por recursos externos em res/values/strings.xml Crie um arquivo de internacionalizao para portugus
Intents
Intents so usados como um mecanismo de passagem de mensagem em que se declara a inteno de uma ao a ser executada Um dos usos mais comuns de um intent iniciar uma Activity Tambm podem ser usados para enviar mensagens em broadcast para o sistema Android envia intents padres
intents
Pode ser usado para transitar entre Activities dentro de uma aplicao Usa-se startActivity(Intent intent) para iniciar uma Activity A intent pode ser criada passando-se como parmetro o objeto que manda a intent e a classe a ser aberta
Exerccio
Crie duas activities Na primeira crie um boto que lana a segunda usando startActivity Na segunda crie um boto que volta para a primeira usando finish
Aula 2
Intents
Intents implcitas
Permite
lanar aplicaes de forma indireta e annima, ou seja, pode-se executar uma ao sem saber qual aplicao vai executar aquela ao
Android usa o processo chamado Intent Resolution para escolher a aplicao que ser lanada Deve-se nominar uma ao a ser executada e, opcionalmente, passar parmetros
Intents
Intents
possvel criar uma Activity que seja lanada de forma implcita Deve-se declar-la no arquivo manifest tendo como action do intent filter a action VIEW
Exerccio
Substitua a forma explcita pela forma implcita de lanamento de Activity do exerccio anterior
Linkify
uma classe que ajuda a criar hyperlinks em Views (principalmente TextView) seguindo expresses regulares Textos que seguem alguns padres de expresses regulares so transformados em links
Esses
Linkify
O mtodo esttico Linkify.addLinks aceita como parmetro um View e uma ou mais flags
As
flags indicam o tipo do link Podem ser WEB_URLS, EMAIL_ADDRESSES, MAP_ADDRESSES, PHONE_NUMBERS ou ALL Para usar mais de uma flag usa-se o caractere separador |
TextView textView = (TextView)findViewById(R.id.myTextView); Linkify.addLinks(textView, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);
Exerccio
Linkify
opes de link podem ser none, phone, map, web, email ou all Pode-se usar mais de uma opo separando-se com |
<TextView android:layout_width=fill_parent android:layout_height=fill_parent android:text=33332222 android:autoLink=phone|web />
Exerccio
Substitua o Linkify do exerccio anterior pela verso em que se adiciona o atributo android:autoLink no arquivo de recurso de layout Altere o valor do texto para algo que no seja um telefone e comprove que o link no ser criado
Sub-Activities
Uma Activity iniciada com startActivity independente Uma Activity pode ser lanada como sub-Activity
Sub-Activities
como o startActivity, mas, alm da Intent, recebe um request code o cdigo que identifica unicamente a sub-Activity que retornou o resultado
private static final int SHOW_SUBACTIVITY = 1; ... Intent intent = new Intent(this, MyOtherActivity.class); startActivityForResult(intent, SHOW_SUBACTIVITY);
Sub-Activities
Retornando resultado
basta
chamar setResult antes de chamar o mtodo finish na sub-Activity setResult recebe como parmetro o cdigo do resultado que ser enviado ao pai pode ser qualquer inteiro, mas geralmente se usa Activity.RESULT_OK ou Activity.RESULT_CANCELED
Sub-Activities
Recebendo o resultado
Usa-se
Exerccio
Utilizando o cdigo do exerccio anterior, use o mtodo startActivityForResult para lanar a segunda Activity Substitua o boto back da segunda Activity por dois botes (ok e cancel)
Use
setResult(Activity.RESULT_OK) e finish() para o boto ok Use setResult(Activity.RESULT_CANCEL) e finish() para o boto cancel
Continuao do exerccio
Na primeira Activity, use o mtodo onActivityResult para tratar o resultado Verifique o request code para certificar qual subActivity que est retornando resultado Se o resultado for RESULT_OK, altere o valor do TextView para ok, se o resultado for RESULT_CANCEL, altere o valor do TextView para cancel
Android prov diversas aes nativas Tambm usam Intents para lanar Activities e subActivities http://developer.android.com/reference/android/c ontent/Intent.html
Intent filters
So usados para que o Android possa determinar qual Activity, Broadcast Receiver ou Service ir executar uma ao Um componente de aplicao que executa uma ao determinada por uma Intent chamado de Intent Handler Usa-se a tag intent-filter dentro da tag de uma Activity, Broadcast Receiver ou Service no arquivo Manifest
Intent filters
action
usa-se android:name para definir o nome da ao a ser servida. o nome deve ser nico no sistema
category
usa-se android:name para especificar em quais circunstncias a ao deve ser servida. cada intent-filter pode incluir mltiplas categorias pode-se especificar uma nova categoria ou usar uma categoria definida no sistema
Intent filters
Categories
ALTERNATIVE
define
que a ao estar disponvel como uma alternativa ao padro Ex: ao padro mostra um contato. Ao alternativa edita ou remove contato.
SELECTED_ALTERNATIVE
similar
ao ALTERNATIVE, mas mostra uma lista para o usurio escolher que a Intent deve vir de um Browser
BROWSABLE
define
Intent filters
Categories
DEFAULT
define que o componente o padro para executar a ao necessrio para lanar Activities de forma implcita
GADGET
especifica que a Activity que executar a ao pode ser embutida em outra Activity
permite substituir a home screen se nenhuma ao for especificada perminte que o cone da aplicao aparea no application launcher
HOME
LAUNCHER
Intent filters
data
especifica
Exerccio
Adicione a categoria DEFAULT segunda activity do exerccio anterior Adicione uma action nica Use startActivity(action) para iniciar a segunda Activity
O processo de escolha da Activity que executar a ao chamado de Intent resolution O processo se d da seguinte forma
Todos
os Intent Filters dos pacotes instalados disponveis so postos juntos em uma lista Intent Filters em que a ao ou a categoria no batem com a Intent so descartados da lista
A
ao bate se o componente contiver a mesma ao no Intent Filter ou no possuir nenhuma ao definida A ao s no bate se o componente contiver uma ao que no seja a mesma da Intent lanada
Continuao do processo
O
android:mimeType
define o tipo do dado android:scheme define o protocolo (http, mailto ou tel) android:host define o host (www.google.com) android:path o path que vem aps o host (/maps)
Intents
possvel descobrir dentro de uma Activity qual Intent que causou seu lanamento Usa-se o mtodo getIntent()
@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Intent intent = getIntent(); }
Exerccio
Use o exerccio anterior e adicione duas aes diferentes ao Intent filter da segunda Activity Altere a primeira Activity para que ela tenha dois botes e para que cada boto lance uma intent diferente (uma para cada ao definida no intent filter da segunda Activity) Altere o valor do TextView da segunda Activity para o valor da ao que causou o lanamento dessa Activiy
Intents podem ser usados para transmitir mensagens para aplicaes (inclusive em outros processos) Android usa Intents para notificar eventos extensivamente
Notificao
Broadcast receivers
So usados para escutar eventos (Intents) lanados em broadcast Deve-se criar uma classe que estende de BroadcastReceiver e implementa o mtodo onReceive Deve-se declarar o BroadcastReceiver no arquivo manifest O mtodo onReceive ser executado quando uma ao que o BroadcastReceiver escuta for lanada
Broadcast receivers
No necessrio que a aplicao esteja sendo executada para que o BroadcastReceiver funcione. Basta apenas declar-lo no arquivo Manifest e adicionar uma ao (ou mais de uma) ao Intent filter Usa-se a tag receiver
<receiver android:name=.MyReceiver> <intent-filter> <action android:name=com.package.myaction/> </intent-filter> </receiver>
Exerccio
Crie um novo projeto e adicione uma classe BroadcastReceiver Adicione a classe criada ao arquivo Manifest usando a tag receiver Defina uma nova ao dentro da tag intent-filter do receiver No projeto criado no exerccio anterior adicione um novo boto. Faa com que esse boto lance uma Intent (com a ao definida para o receiver) em broadcast usando o mtodo sendBroadcast
Exerccio
Verifique (usando Log) no mtodo onReceive do BroadcastReceiver se ele est sendo chamado quando a Intent lanada em broadcast Crie um EditText na aplicao que vai lanar a Intent Use o valor do EditText para adicionar dados Intent usando putExtra Recupere o valor enviado no BroadcastReceiver usando getString e use no Log
Trabalhando em background
Devido ao tamanho pequeno da tela, geralmente os dispositivos mveis s mostram um aplicao por vez Este o cenrio perfeito para aplicaes que executam em background Android oferece a classe Service para criar componentes que executam tarefas de forma silenciosa Services tm uma prioridade maior que Activities inativas
Trabalhando em background
Se o Android precisar de recurso e matar um Service, esse Service ser reiniciado assim que possvel No necessitam de uma UI Processos que consumam tempo devem usar Services (requisies de rede, por exemplo) Como no possuem UI, os Services so iniciados, parados e controlados por outros componentes, incluindo Services, Activities e Broadcast Receivers
Services
Para criar um Service crie uma classe que estenda da classe base Service e sobrescreva o mtodo onBind
public class MyService extends Service { @Override public IBinder onBind(Intent intent) { ... return null; } }
Services
Na maioria dos casos tambm desejvel sobrescrever os mtodos onStart e onCreate O onStart chamado sempre que o servio iniciado
@Override public void onCreate() { ... } @Override public void onStart(Intent intent, int startId) { ... }
Services
Todo servio, para ser utilizado, deve ser inserido no arquivo Manifest Usa-se a tag service dentro do n application Pode-se usar alguns atributos como android:enable
Para iniciar um Service, usa-se o mtodo startService Um servio pode ser iniciado implicitamente ou explicitamente, assim como Activities Para iniciar implicitamente usa-se uma Intent com a ao especificada no intent-filter do Service Para iniciar explicitamente usa-se a classe
startService(new Intent(com.package.ACTION)); startService(new Intent(this, MyService.class));
Exerccio
Crie um projeto novo com uma Activity e um Service Adicione a Activity e o Service ao arquivo Manifest Adicione um Intent Filter com uma Action nica ao Service no arquivo Manifest Crie um boto na Activity e chame startService, para iniciar o Service criado, quando o boto for apertado Teste as duas formas de lanamento de Services: implcita e explcita Use Log no mtodo onStart do Service para verificar que o Service foi iniciado
Intent pode ser implcita ou explcita, da mesma forma que no uso do startService
Exerccio
Crie um segundo boto Chame o mtodo stopService no click do segundo boto para parar o Service Sobrescreva o mtodo onDestroy no Service para verificar (usando Log) que o Service foi destrudo
Quando uma Activity inicia um Service usando startService ela no tem nenhuma referncia instncia do Service Usa-se um processo chamado Binding para ligar a Activity ao Service Para que a ligao seja feita o mtodo onBind de Service deve ser implementado
Primeiramente deve-se criar uma classe que estenda da classe base Binder e criar um mtodo nessa classe que retorne a instncia do Service A classe pode ser uma classe interna
Cria-se um atributo do Service que a instncia da classe Binder Essa instncia vai ser usada como retorno do mtodo onBind
private final IBinder binder = new MyBinder(); ... @Override public IBinder onBind(Intent intent) { return binder; }
A ligao finalmente realizada usando-se uma instncia da classe ServiceConnection dentro da Activity Deve-se sobrescrever os mtodos onServiceConnected e onServiceDisconnected
private MyService serviceBinder; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { serviceBinder = ((MyService.MyBinder)service).getService(); } public void onServiceDisconnected(ComponentName className) { serviceBinder = null; }
Para iniciar o Service e realizar a ligao, usa-se o mtodo bindService Passa-se como parmetro
Intent
Exerccio
Use Binding para ligar a Activity ao Service Crie um mtodo em Service que retorne a data e hora
public String getClock() { Date date = new Date(); return date.toLocaleString(); }
Aps a ligao ser realizada, use o mtodo acima para alterar o valor do TextView da Activity
Aula 3
Activity + BroadcastReceiver
Existe outra forma registrar um Intent Filter a um BoradcastReceiver Usa-se uma instncia do BroadcastReceiver e um objeto IntentFilter como parmetros do mtodo registerReceiver
private MyReceiver mReceiver = null; public static final String action = "com.i10.aula3.ACTION"; ... IntentFilter filter = new IntentFilter(action); registerReceiver(mReceiver, filter);
Activity + BroadcastReceiver
Essa forma de uso permite que a Activity tenha uma instncia do BroadcastReceiver Permite receber Intents de outras aplicaes e alterar a UI com os dados recebidos na Intent
Exerccio
Crie uma aplicao contendo uma Activity e um BroadcastReceiver Crie uma string que represente uma action Crie um IntentFilter com a action Crie uma instncia do BroadcastReceiver Registre o BroadcastReceiver ao IntentFilter Crie outra aplicao para enviar a action em broadcast usando sendBroadcast e teste o recebimento com Log
Exerccio
Altere a segunda aplicao criada para que ela tenha um EditText e um boto Adicione o texto do EditText Intent usando putExtra Envie a Intent em broadcast quando o boto for apertado Receba a intent no onReceive do BroadcastReceiver e altere o valor do TextView da Activity
Context
uma classe que contm informaes globais sobre o ambiente da aplicao Permite acesso a recursos e classes especficos da aplico Permite acesso a aes no nvel da aplicao como lanamento de Activity, e Services Muitas classes herdam indiretamente de Context
Toast
Toasts so caixas de mensagem que permanecem visveis por pouco tempo Servem como mecanismo de informao e alerta No interrompem a aplicao ativa Usa-se o mtodo esttico makeText para criar um toast padro
Toast toast = Toast.makeText(Context context, String msg, int diration); toast.show();
Shared Preferences
Ideal para salvar preferncias dos usurios ou configuraes da aplicao Mecanismo leve que salva grupos de chave/valor Pode ser compartilhado entre componentes da mesma aplicao Suporta os tipos primitivos
Boolean,
Shared Preferences
Para criar uma Shared Preference usa-se o mtodo getSharedPreferences, passando-se o nome da Shared Preference a ser alterada e o modo
public static final String MYPREFS = "mySharedPreferences"; ... SharedPreferences mySharedPreferences = getSharedPreferences(MYPREFS, Activity.MODE_WORLD_READABLE);
Shared Preferences
Para inserir valores em uma Shared Preference usase o mtodo edit de SharedPreferences Esse mtodo retorna um objeto do tipo SharedPreferences.Editor Usa-se os mtodos put<Tipo> para adicionar valores
SharedPreferences.Editor editor = mySharedPreferences.edit(); editor.putInt("age", 22); editor.commit();
Shared Preferences
Para recuperar um valor de uma Shared Preference usam-se os mtodos get<Tipo>, passando-se como parmetro a String que representa a chave e o valor padro
int age = mySharedPreferences.getInt("age", 0);
Exerccio
Altere o exerccio anterior para que o texto recebido no BroadcastReceiver via Intent seja salvo e, da prxima vez que o aplicativo for iniciado, o texto aparea no TextView Para testar feche a aplicao apertando o boto back e abra-o novamente a partir da lista de cones
Notifications
bar
Notifications
O sistema Notification Manager usado para gerenciar notificaes Para se obter uma referncia desse sistema usa-se o mtodo getSystemService
String svcName = Context.NOTIFICATION_SERVICE; NotificationManager notificationManager; notificationManager = (NotificationManager)getSystemService(svcName);
Notifications
cria-se um novo objeto Notification, passando como parmetro um cone, um texto, e um long
int icon = R.drawable.icon; String tickerText = Notification; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when);
Notifications
Depois
usa-se o mtodo setLatestEventInfo para configurar detalhes da notificao que aparecero quando a barra de status for estendida
Context context = getApplicationContext(); String expandedText = Extended status text; String expandedTitle = Notification Title; Intent intent = new Intent(this, MyActivity.class); PendingIntent launchIntent = PendingIntent.getActivity(context, 0, intent, 0); notification.setLatestEventInfo(context, expandedTitle, expandedText, launchIntent);
Notifications
Finalmente
usa-se o mtodo notify de NotificationManager para lanar a notificao Passa-se um inteiro de referncia e a notificao
int notificationRef = 1; notificationManager.notify(notificationRef, notification);
inteiro de referncia pode ser usado para atualizar a notificao usando o cdigo acima (lanar a mesma notificao com valores diferentes) Tambm usado para cancelar uma notificao
notificationManager.cancel(notificationRef);
Exerccio
Crie uma Activity que lance uma Notificao no mtodo onStop A notificao deve lanar novamente a Activity quando for selecionada Cancele a notificao no mtodo onRestart
Usando Alarms
So uma forma de lanar Intents, de forma independente de aplicaes, em tempo predeterminado Os alarmes so configurados em aplicaes, mas executam mesmo depois que a aplicao seja fechada Formam uma poderosa ferramenta junto com os BroadcastReceivers Permanecem ativos quando a tela est apagada, mas so cancelados quando o dispositivo reiniciado
Usando Alarms
Da mesma forma que o sistema de notificao, os alarmes podem ser gerenciados usando o mtodo getSystemService
Usando Alarms
Para criar um novo alarm usa-se o mtodo set Passa-se como parmeto
Tipo
do alarme: RTC_WAKEUP, RTC, ELAPSED_REALTIME ou ELAPSED_REALTIME_WAKEUP Data e hora do lanamento Pending Intent
Usando Alarms
int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; long timeOrLengthofWait = 10000; String ALARM_ACTION = ALARM_ACTION; Intent intentToFire = new Intent(ALARM_ACTION); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); alarms.set(alarmType, timeOrLengthofWait, pendingIntent);
Um Alarm lanado com mesma PendingIntent cancela o primeiro Para cancelar um Alarm usa-se mtodo cancel passando-se a PendingIntent como parmetro
Exerccio
Crie uma Activity com um boto que, quando apertado, configure um alarme para 1min depois da hora atual Defina uma ao para ser lanada em broadcast, via Intent, pelo Alarm Crie outro projeto com um BroadcastReceiver que filtre a ao Lance uma notificao quando o BroadcastReceiver receber a ao lanada pelo Alarm Adicione uma String como dado extra da Intent (putExtra) e use essa string como mensagem da notificao
Timer
Quando a tarefa deve ser executada dentro da aplicao, e com uma freqncia alta, usa-se Timers Os Timers servem para executar tarefas uma vez ou repetidas vezes Usa-se a classe Timer
Timer timer = new Timer();
Timer
task, Date when, long period) schedule(TimerTask task, long delay, long period) schedule (TimerTask task, Date when) schedule TimerTask task, long delay) scheduleAtFixedRate(TimerTask task, long delay, long period) scheduleAtFixedRate(TimerTask task, Date when, long period)
Timers
O mtodo cancel cancela as tarefas pendentes Os Timers executam TimerTask Uma TimerTask representa uma tarefa a ser executada Deve-se sobrescrever o mtodo run, que onde a tarefa ser executada
TimerTask timerTask = new TimerTask() { @Override public void run() { Log.i("MyTimer", "ok"); } };
Timers
AppWidget
So aplicaes em miniatura que executam na Home Screen Para criar uma AppWidget necessrio um AppWidgetProviderInfo
Define
metadados da AppWidget como Layout e frequncia de atualizao mtodos bsicos para interagir com a AppWidget programaticamente e recebe eventos, como enable, disable, delete e update
AppWidget
AppWidget
Deve-se criar um arquivo xml em res/xml para representar AppWidgetProviderInfo (ex. widgetinfo.xml)
AppWidget
Cria-se uma classe que estenda de AppWidgetProvider Adiciona-se a classe criada ao Manifest como um receiver
<receiver android:name="AppProvider" android:label="MyWidget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidgetinfo"/> </receiver>
AppWidget
para atualizar a AppWidget Chamado com a freqncia definida no arquivo xml de metadados Freqncia baixa Pode-se usar Timers para se obter uma freqncia de atualizao maior
Exerccio
Criar uma AppWidget que mostre a hora Primeiro siga os passos descritos anteriormente para criao de AppWidget Adicione a action "android.appwidget.action.APPWIDGET_UPDATE ao intent-filter do receiver Sobrescreva o mtodo onUpdate Crie um Timer com atualizao de 1s dentro do onUpdate
Exerccio
WebViews
Para se criar uma UI usando html ou exibir uma pgina web usa-se WebView Para criar uma WebView adiciona-se a tag WebView ao arquivo de layout
<WebView android:id="@+id/myWebView" android:layout_width="fill_parent" android:layout_height="fill_parent" />
WebViews
Adiciona-se ao manifest No onCreate da Activity usa-se o mtodo findViewById para recuperar a WebView e usa-se o mtodo loadUrl de WebView para carregar a pgina
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.google.com");
WebViews
Pode-se usar um arquivo html local Cria-se o arquivo html no diretrio res/assets Carrega-se a pgina usando o seguinte cdigo
WebView webView = (WebView) findViewById(R.id.webview); webView.loadUrl("file:///android_asset/index.html");
WebViews
Com o javascript habilitado possvel criar uma interface entre a pgina web e o cdigo da Activity
WebViews
Usa-se o mtodo addJavascriptInterface passandose a instncia que ser exportada ao javascript e o nome da interface
webView.addJavascriptInterface(this, demo);
WebViews
Para chamar uma funo do javascript a partir do cdigo android, usa-se loadUrl(javascript:function()); Obs: no funciona no emulador com a verso do target acima de 2.2 Usa-se emulador com verso de target 2.1 ou dispositivo real
Exerccio
Crie uma aplicao com WebView Adicione o arquivo html fornecido (calculadora.html) ao WebView crie um mtodo na Activity para fazer a soma de dois inteiros
soma(int a, int b)
Animao tweened
Animaes tweened so criadas usando a classe Animation Cria-se um arquivo xml no diretrio res/anim Pode-se usar as animaes
rotate translate scale alpha
set
Animao tweened
Animao tweened
Para aplicar a animao a uma View usa-se o mtodo startAnimation dessa classe
myTextView.startAnimation(animationRotate);
Para que o elemento permanea na posio final da animao usa-se o mtodo setFillAfter de Animation
animationRotate.setFillAfter(true);
Exerccio
Em uma aplicao com um boto e um TextView crie uma animao que rotacione o TextView quando o boto for pressionado
Menus
Menus permitem executar aes de forma fcil em uma aplicao Existem trs tipos de menu
Options
Menus
Usa-se a tag menu como a tag raiz que agrupar itens Usa-se a tag item para definir um MenuItem Os itens podem conter atributos como
android:id android:icon android:title
Menus
Menu
Para adicionar o menu Activity basta sobrescrever o mtodo onCreateOptionsMenu e usar a classe MenuInflater para carregar o menu do arquivo xml
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mymenu, menu); return true; }
Menu
Exerccio
Crie um menu com duas opes: next e close No evento do next lance uma segunda activity do mesmo projeto No evento do close feche a aplicao
Sensor
Para obter dados de um sensor usa-se a classe SensorManager Uma instncia do SensorManager pode ser obtida com o mtodo getSystemService
Aps obter a instncia do SensorManager pode-se obter um objeto que d acesso ao sensor
Sensor
Para que uma classe possa receber atualizaes dos dados do sensor necessrio que ela implemente a interface SensorEventListener e os mtodos onAccuracyChanged e onSensorChanged necessrio tambm registrar essa classe como listener do sensor
Sensor
Aps registro, os dados do sensor sero enviados para o mtodo onSensorChanged, na forma de um objeto SensorEvent Com o SensorEvent podemos obter os valores do sensor
sensorEvent.values[SensorManager.AXIS_X] sensorEvent.values[SensorManager.AXIS_Y] sensorEvent.values[SensorManager.AXIS_Z]