Você está na página 1de 183

ANDROID

Diego Bezerra

Ambiente de desenvolvimento

Eclipse ADT plugin (templates e construo de UI) Android SDK

Introduo

Inicialmente o desenvolvimento era especfico para cada dispositivo mvel As plataformas evoluram com o tempo (Symbian)
Maior

alcance de dispositivos Desenvolvimento ainda difcil

MIDlets (JVM)
Acesso

restrito (Java Specification Requests)

Introduo

Android um sistema que permite acesso ao hardware de forma equalitria


APIs

completas Mquina Virtual (dalvik) construda sobre um kernel Linux. Aplicaes nativas podem ser substitudas

Introduo

Suporta bibliotecas open source


WebKit OpenGL SQLite

Aplicaes nativas
Cliente SMS Player

de email de msica

Introduo

Algumas caractersticas comuns


Acesso

a wi-fi e rede de dados Sistema de localizao Acesso a sensores Cmera Audio IPC Google maps

Introduo

Sistema multi tarefa Aplicaes em background


No

requer interao com usurio

Introduo

Comunicao entre aplicaes


Notifications:

barra de informaes do Android, vibrao, som e LED Intents Content Providers

Introduo

Gerenciamento de memria otimizado


O

sistema Android gerencia o ciclo de vida das aplicaes Gerenciamento baseado em prioridades

Por que desenvolver em Android?


Sistema poderoso e simples Documentao muito boa Comunidade ativa Sem taxas para desenvolvimento Android market

A plataforma de desenvolvimento

A liguagem de desenvolvimento JAVA, mas a mquina virtual no JVM


Dalvik

Cada aplicao executada em um processo separado Dalvik interage com o Kernel Linux

A plataforma de desenvolvimento

Ferramentas de desenvolvimento
Compilador,

depurador, logcat

Emulador Documentao e exemplos de cdigo

Mquina virtual Dalvik


Permite multi tarefa Funcionalidades de baixo nvel


Thread,

gerenciamento de processo e gerenciamento de memria

Acesso facilitado ao hardware Arquivos .dex

Bibliotecas Android

android.util

Tratamento de strings, parser de XML


Funes de relgio, IPC UI

android.os

android.view

android.widget

Elementos de UI
Monitorar chamadas

android.telephony

Bibliotecas avanadas Android

android.location
GPS

e localizao GSM

android.media android.opengl android.hardware


sensores,

camera

android.bluetooth

Tipos de aplicao Android

Foreground Activity
Jogos,

mapas, browser

Background Service
SMS,

alarmes de msica

Intermittent Activity
Player

Algumas aplicaes contemplam os trs tipos

Primeira aplicao Android

Criar uma aplicao (Hello World) utilizando o eclipse Utilizar o Emulador Utilizar logcat Utilizar depurao Verificar instalador (apk)

O que o eclipse + adt faz?


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

Analisando o exemplo criado

Activity

a classe base para o componente visual

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

O mtodo findViewById permite acessar elementos definidos no xml

Exerccio

Use o mtodo findViewById para alterar a mensagem da aplicao


TextView myTextView = (TextView)findViewById(R.id.myTextView);

Tambm possvel criar UI diretamente no cdigo (embora no recomendado) O Eclipse + ADT ajuda na criao de UI

O que se deve levar em considerao


Pouca memria RAM Pouca memria de armazenamento Pouco poder de armazenamento Tela pequena Custo de transferncia de dados Bateria

Blocos de construo do android


Activities Services Content Providers Intents Broadcast Receivers Notifications

Arquivo Manifest

Todo projeto Android possui em sua raiz um arquivo AndroidManifest.xml Permite definir estrutura e metadados (icone, tema)
Main

Activity, intent filters, permisses

Tipicamente na seguinte forma:


<manifest xmlns:android=http://schemas.android.com/apk/res/android package=com.my_domain.my_app> [ ... manifest nodes ... ] </manifest>

Arquivo Manifest

A tag manifest possui ns que definem


Componentes

da aplicao Opes de segurana Classes de test

Possveis ns em um 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

Tipicamente na seguinte forma

<application android:icon=@drawable/icon android:theme=@style/my_theme> [ ... application nodes ... ] </application>

Possveis ns em um arquivo Manifest

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

Possveis ns em um arquivo Manifest

service
Requerido

para cada Service da aplicao Assim como Activities, tambm suporta as tags intentfilter

Tipicamente na forma

<service android:enabled=true android:name=.MyService></service>

Possveis ns em um arquivo Manifest

provider
Usado

para definir Content Providers

receiver
Define

um Broadcast Receiver Permite que funcionem como listeners globais No necessitam que a aplicao seja iniciada para que funcionem

Possveis ns em um arquivo Manifest

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>

Possveis ns em um arquivo Manifest

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>

Possveis ns em um arquivo Manifest

instrumentation
Prov

mecanismos para executar testes em Activities e Services

Exemplo de uso
<instrumentation android:label=My Test android:name=.MyTestClass android:targetPackage=com.package> </instrumentation>

Ciclo de vida das aplicaes

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

ativas que possuem interatividade com o

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

Started Service Processes


Services

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,

cores, imagens, layouts, etc

Facilita manuteno e internacionalizao

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,

drawable, layout, animations, XML, styles e raw

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

Criando valores simples

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

Criando valores simples


<?xml version=1.0 encoding=utf-8?> <resources> <string name=app_name>To Do List</string> <color name=app_background>#FF0000FF</color> <dimen name=default_border>5px</dimen> <array name=string_array> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </array> <array name=integer_array> <item>3</item> <item>2</item> <item>1</item> </array> </resources>

Strings

Recursos de Strings so criados usando a tag string


<string name=stop_message>Stop.</string>

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

Imagens De preferncia PNG Icone da aplicao e imagens utilizadas dentro da aplicao

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

Existem dois tipos de animao


Tweened

(scale, rotate, alpha e translante) Frame-by-frame (sprites)


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>

Referenciando recursos dentro de recursos

Para referenciar um recurso usa-se o @

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

Usando recursos do sistema

O Android prov diversos recursos


strings,

imagens, estilos e layouts

Para acessar usa-se o pacote android


<EditText android:id=@+id/myEditText android:layout_width=fill_parent android:layout_height=wrap_content android:text=@android:string/httpErrorBadUrl android:textColor=@android:color/darker_gray />

Pode tambm ser acessado diretamente no cdigo


CharSequence httpError = getString(android.R.string.httpErrorBadUrl);

Exerccio

No exemplo criado, utilizar uma das cores providas pelo Android como cor de background

Criando recursos para diferentes caractersticas

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

Criando recursos para diferentes caractersticas

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

Criando recursos para diferentes caractersticas

Qualificadores disponveis
Linguagem:

cdigo de linguagem ISO 639-1 (en, fr, pt,

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)

Criando recursos para diferentes caractersticas


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

Cdigo bsico de uma Activity


package com.myapplication; import android.app.Activity; import android.os.Bundle;
public class MyActivity extends Activity { /** Chamado quando a activity criada*/ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); } }

Activity

O cdigo anterior cria uma tela vazia Para criar uma tela til usa-se View
Mostram

dados e interagem com o usurio

Usa-se o mtodo setContentView para atribuir uma View Activity


@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView myView = new MyView(this); setContentView(myView); }

Activity

mais comum usar um layout definido externamente


@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); }

Permite criar UI mais complexas de forma mais fcil

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

Estados de uma Activity


Active:

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

Monitorando mudanas de estado

As Activities podem reagir a mudanas de estado usando event handlers providos pelo Android

Interface com o usurio (UI)

Android introduz uma nova terminologia


Views:

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

Interface com o usurio (UI)

Views so freqentemente referidas como controls ou widgets


No

existe muita diferena entre os dois Apenas conveno

Interface com o usurio (UI)

Android prov uma caixa de ferramentas contendo Views padres que ajudam na construo de UI simples
TextView,

EditText, ListView, Spinner, Button, Checkbox, RadioButton, entre outros

Layouts

So extenses de ViewGroup e so usados para posicionar View na tela


FrameLayout: o mais simples dos layouts. Apenas posiciona o view no canto superior esquerdo da tela LinearLayout: Adiciona Views seqencialmente. Pode ser vertical ou horizontal RelativeLayout: Permite posicionar os itens relativamente uns aos outros ou ao pai TableLayout: Permite dispor os itens em uma tabela AbsoluteLayout: Cada item disposto usando coordenadas absolutas

Exerccio

Crie uma aplicao Hello World Adicione dois botes ao layout


um

boto com o texto red e outro com o texto green


<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="red" /> android:onClick="setColorToRed"

Adicione e

o evento onClick aos botes

android:onClick="setColorToGreen"

Exerccio

Crie os mtodos setColorToRed(View view) e setColorToGreen(View view) na Activity

Teste a funcionalidade dos mtodos usando Log

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

Use Color.RED para vermelho e Color.GREEN para verde

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

Intent myIntent = new Intent(this, OtherActivity.class)

O mtodo finish() fecha a activity

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

Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(tel:10325)); startActivity(intent);

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

<action android:name="android.intent.action.VIEW" />

Para lanar a Activity usa-se o seguinte cdigo


Intent myIntent = new Intent(); myIntent.setAction("android.intent.action.VIEW"); myIntent.setClassName(package", package.classname"); startActivity(myIntent);

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

links lanam implicitamente a ao:

startActivity(new Intent(Intent.ACTION_VIEW, uri)); O texto do View usado como URI

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

Crie um TextView que seja um link para um nmero de telefone

Linkify

Opcionalmente pode-se usar Linkify diretamente no arquivo de recurso de layout


android:autoLink=phone As

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

conectada ao pai O pai obtm retorno atravs de um event handler

Sub-Activities

Para lanar uma sub-Activity usa-se o mtodo startActivityForResult


Funciona

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

o event handler onActivityResult no pai Trs parmetros so recebidos


request

code result code data


public void onActivityResult(int requestCode, int resultCode, Intent data)

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

Aes nativas do Android


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

Algumas tags podem ser definidas dentro da tag intent-filter

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

o tipo de dado o qual o componente

executar Alguns atributos que podem ser usados


android:host

(google.com) android:mimetype especifica o tipo de dado (image/jpeg)

Exerccio

Adicione a categoria DEFAULT segunda activity do exerccio anterior Adicione uma action nica Use startActivity(action) para iniciar a segunda Activity

Como o Android resolve os intent-filters

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

Como o Android resolve os intent-filters

Continuao do processo
O

Android compara o campo data

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)

Os Intent filters do sistema no tm prioridade maior que os Intent filters de terceiros

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

Usa-se intent.getAction() para se descobrir a ao que lanou a Activity

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 como eventos em broadcast

Intents podem ser usados para transmitir mensagens para aplicaes (inclusive em outros processos) Android usa Intents para notificar eventos extensivamente
Notificao

de nvel de bateria ou conexes da rede, por exemplo

Usa-se o mtodo sendBroadcast(Intent intent) para laar o evento

Intents como eventos em broadcast

Pode-se adicionar dados primitivos Intent com o mtodo putExtra


Intent intent = new Intent(com.package.actionName); intent.putExtra(age, 22); intent.putExtra(height, 175); intent.putExtra(wheight, 80);

Pode-se recuperar um dado de uma Intent usandose o mtodo get<Type>Extra(chave, valorPadro)


int age = getIntExtra(age, 0);

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

<service android:enabled=true android:name=.MyService></service>

Iniciando, controlando e interagindo

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

Iniciando, controlando e interagindo

Um Service pode ser parado usando-se o mtodo stopService(Intent)


A

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

Ligando uma Activity a um Service

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

Ligando uma Activity a um Service

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

public class MyBinder extends Binder { MyService getService() { return MyService.this; } }

Ligando uma Activity a um Service

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

Ligando uma Activity a um Service

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

Ligando uma Activity a um Service

Para iniciar o Service e realizar a ligao, usa-se o mtodo bindService Passa-se como parmetro
Intent

com a ao para iniciar o servio Instncia do ServiceConnection Flag


@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Intent bindIntent = new Intent(MyActivity.this, MyService.class); bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); }

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

O mtodo unregisterReceiver serve para cancelar o registro do BroadcastReceiver ao IntentFilter


unregisterReceiver(mReceiver);

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,

String, float, long e int

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

So as formas em que as aplicaes alertam os usurios sem usar uma Activity


Status LED Vibrao Sons

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

Usando NotificationManager podemos criar, modificar ou remover notificaes

Notifications

A criao de novas notificaes feita em trs partes


Primeiro

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

AlarmManager alarms = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

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

Exemplo de criao de um Alarm

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

Exemplo de criao de Alarm


AlarmManager alarms = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
String MY_RTC_ALARM = MY_RTC_ALARM; PendingIntent rtcIntent = PendingIntent.getBroadcast(this, 0, new Intent(MY_RTC_ALARM), 1); Date t = new Date(); t.setTime(java.lang.System.currentTimeMillis() + 60*1000*5); alarms.set(AlarmManager.RTC_WAKEUP, t.getTime(), rtcIntent);

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

A classe Timer prov alguns mtodos para execuo de tarefas


schedule(TimerTask

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

Exemplo de uso de Timer


timer = new Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { Log.i("MyTimer", "ok"); } }; timer.schedule(timerTask, 0, 1000);

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

Tambm necessria a classe AppWidgetProvider


Define

AppWidget

Primeiramente, cria-se um arquivo de layout em res/layout (ex. widgetLayout)


<?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" > <TextView android:id="@+id/widgetText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Widget text" android:background="#000000" /> </LinearLayout>

AppWidget

Deve-se criar um arquivo xml em res/xml para representar AppWidgetProviderInfo (ex. widgetinfo.xml)

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="50px" android:minHeight="10px" android:updatePeriodMillis="86400000" android:initialLayout="@layout/widgetlayout"> </appwidget-provider>

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

Na classe AppWidgetProvider deve-se sobrescrever o mtodo onUpdate


Usado

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

Adicione o seguinte cdigo dentro do mtodo run do Timer

widgetView = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);

Date date = new Date(); date.setTime(System.currentTimeMillis()); String clock = date.toGMTString();


widgetView.setTextViewText(R.id.widgetText, clock); ComponentName thisWidget = new ComponentName(AppProvider.this.appContext, AppProvider.class); AppWidgetManager manager = AppWidgetManager.getInstance(context); manager.updateAppWidget(thisWidget, widgetView);

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

<uses-permission android:name="android.permission.INTERNET" />

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

Para usar javascript necessrio habilit-lo no WebView


WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true);

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

No html usa-se a interface com window.demo.metodo()


<html> <body> <div onclick=window.demo.androidClick()> Click here! </div> </body> </html>

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)

Atualize a pgina html com o resultado da soma chamando a funo result


mWebView.loadUrl(javascript:result(+ resultado +))

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

Pode-se definir um conjunto de animaes

set

Animao tweened

Exemplo de arquivo xml para uma animao de rotao


<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <rotate android:fromDegrees="0" android:toDegrees="-180" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> </set>

Animao tweened

Para carregar a animao usa-se o mtodo loadAnimation de AnimationUtils


Animation animationRotate = AnimationUtils.loadAnimation(context, R.anim.animationrotate);

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

Menu Context Menu Submenu

Para criar um menu usa-se arquivos de recurso


Arquivo

xml no diretrio res/menu (no crie com o nome menu.xml)

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

Exemplo de xml de menu


<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/new_game" android:icon="@drawable/ic_new_game" android:title="@string/new_game" /> <item android:id="@+id/help" android:icon="@drawable/ic_help" android:title="@string/help" /> </menu>

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

Para obter o evento do menu de opes sobrescreve-se o mtodo onOptionsItemSelected(MenuItem item)


@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.new_game: Log.i("MyActivity", "new"); return true; case R.id.help: Log.i("MyActivity", "help"); return true; default: return super.onOptionsItemSelected(item); } }

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

String service_name = Context.SENSOR_SERVICE; SensorManager sensorManager = (SensorManager)getSystemService(service_name);

Aps obter a instncia do SensorManager pode-se obter um objeto que d acesso ao sensor

Sensor acc = sensorManager getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

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

sensorManager.registerListener(this, acc, SensorManager.SENSOR_DELAY_NORMAL);

Sensor

Pode-se cancelar o registro usando o mtodo unregisterListener


sensorManager.unregisterListener(this);

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]

Você também pode gostar