Você está na página 1de 71

Android : Desenvolvimento de aplicaes mveis

Max Bonbhel Consultor Senior de Software Instrutor de Java / Android

Por que ?

AGENDA

Agenda
Onde encontrar o Android? Quem usa o Android? UI Layout, Menu, Alertas e Notificaes Atividades Armazenamento de Dados Provedores de Contedo Multimdia (udio e Vdeo) Servios Localizao e Mapas Servios Web, XML, Computao em nuvem Segurana e Permisses

Recursos e Assets

ONDE ENCONTRAR O ANDROID ?


Est em todos os lugares !
4

Onde encontrar Android ?



5

Celulares NetBook RIM BlackBerry PlayBook tablet Tablet PC Carros Smart TV Em resumo em quase todos os lugares

QUEM USA O ANDROID?


Todo mundo!
6

Quem usa o Android?

Quem usa Android ?


Programadores; Empresrios envolvidos com alta tecnologia; Todo mundo!

O QUE O ANDROID NO
Android vs IPhone Duas plataformas, 2 conceitos

O que Android no
Uma ferramenta para construir robs humanides
(pelo menos no por enquanto) Uma implementao de Java ME As aplicaes Android no so executadas na mquina virtual

Um elemento do Linux Phone Standard Forum (LiPS) ou do Open Mobile Alliance (OMA)
Assim como no Linux, o Android executa um kernel de cdigo aberto, e vai alm das preocupaes de padronizao do LiPS e da OMA.

A camada de aplicao simples (como UIQ ou S60)


SO Android = SO subjacente + APIs + Aplicaes (nativas e terceiros).

Um celular
Plataforma de Referncia para os fabricantes. No de UM s telefone Android mais DOS telefones Android.

Uma resposta para o iPhone (... Bom... No tenho certeza!)


10

IPhone = Um fabricante , Um SO (fechado), Um hardware!

O QUE ANDROID REALMENTE


Uma plataforma aberta para desenvolvimento mvel

11

O que Android realmente


Um sistema operacional Linux de cdigo aberto fornecendo uma interface com hardware de baixo nvel:
Gesto de memria Controle do processador

Bibliotecas open-source para desenvolvimento de aplicativos


SQLite, WebKit, OpenGL Um gerenciador de mdias

Um motor em tempo de execuo para aplicativos Android, incluindo:


A Mquina Virtual Dalvik As bibliotecas de base

Um Framework que mostra os servios do sistema


12

Window Manager (Gerenciador de Janelas) Location Manager (Gerenciador de geo-localizao) Content Manager (Gerenciador de contedo)

SDK ANDROID
Com a caixa de ferramentas possvel criar aplicativos que sero includos no telefone, como aplicaes nativas do Android. A VM Dalvik no uma JVM, tal como Java ME. Facilidade para escrever aplicaes em C# e C++ para Dalvik.
13

O SDK Android

14

O SDK Android
Sem custos de licena (desenvolvimento, distribuio) Nenhum processo de aprovao de aplicativos de terceiros O acesso direto ao hardware
Wi-Fi, redes GSM, EDGE, e 3G SMS

APIs completas para servios de localizao, como o GPS. Controle total de equipamentos de multimdia
Leitura e gravao de vdeo e udio Acelermetro Bssola

Controle de sensores
Motor grfico
15

Grficos 2D Grficos 3D com o OpenGL ES 2.0

DESENVOLVEDORES: POR ONDE COMEAR?


Por toda a plataforma

16

Por onde comear


SO suportados
Microsoft Windows (XP ou superior) Mac OS X 10.4.8 ou superior (somente processador Intel)

Linux

Ambiente de Desenvolvimento
SDK Android (http://developer.android.com/sdk/index.html) JDK5 ou 6 (http://sun.java.com/javase/downloads/index.jsp) Eclipse 3.4 ou 3.5 (Galileo de preferncia) O plugin Eclipse ADT (Android Developer Tool)

O plugin ADT no obrigatrio, mas facilita muito o desenvolvimento


17

Declarando um layout Estrutura do arquivo de Layout Tipos de Layout

INTERFACE USURIO (LAYOUT)


18

Declarando um layout
Duas maneiras de declarar um Layout
Opo #1: Declare os elementos da interface do usurio em um arquivo XML (fcil de organizar, visualizar, etc...). Altamente Recomendado
O Android fornece um vocabulrio bastante simplificado de elementos XML correspondentes s classes e subclasses do tipo View.

Opo #2: Instanciar os elementos do layout em tempo de execuo (no cdigo Java)
O aplicativo pode gerar objetos do tipo View (Viso) ou ViewGroup (Grupo de vises) e, assim, manipular suas propriedades por programao no cdigo Java.

Tambm possvel utilizar as duas opes juntas


Usando a declarao de mtodo para os elementos da interface do usurio por padro e, em seguida, usar o cdigo Java para modificar as propriedades em tempo de execuo.

19

Estrutura do arquivo de Layout


Cada arquivo pode conter apenas um elemento raiz (root) para ser um objeto do tipo View (por exemplo, um boto) ou tipo ViewGroup (por exemplo, um Layout Linear). Uma vez que o elemento raiz (root) definido, possvel adicionar mais elementos filhos para gradualmente construir seu layout.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ol, eu sou um TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ol, eu sou um boto" /> </LinearLayout>

20

Estrutura do arquivo de Layout


Cada arquivo de layout ser compilado em um recurso do objeto View. O recurso est disponvel no cdigo do aplicativo gerado atravs do Activity.onCreate ()
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); }
21

Tipos de Layout
Todos os tipos de layout so subclasses da classe ViewGroup
LinearLayout
Alinha ou empilha todos os elementos filhos em uma direo (horizontal ou vertical). A distncia entre os elementos respeita a gravidade (alinhado direita, centro ou esquerda).

RelativeLayout
Cada elemento filho pode ter a sua prpria posio em relao ao pai ou outros elementos filhos. Se, por exemplo, o primeiro elemento filho est centralizado, em seguida, todos os outros elementos cujas posies no foram especificados sero alinhados ao centro tambm.

TableLayout
22

Os elementos filho so posicionados em linhas (TableRow) e colunas. Cada linha pode ter zero ou mais clulas.

Tipos de Layout
FrameLayout
FrameLayout o mais simples dos objetos tipo layout. apenas um espao vazio na tela onde voc pode preencher com um nico objeto. Ex: uma imagem de fundo. Todos os elementos filhos so automaticamente colocados no topo esquerdo da tela.

23

INTERFACE USURIO (MENU)


Tipos de menus Menu de Contexto Menu de Opes Sub Menus

24

Menu de Contexto (Context Menu)


Tipos de menu
Context Menu :
Lista flutuante de itens no menu que aparece quando voc pressiona por um longo tempo em uma View. No suporta cones (apenas texto). Os itens podem ser adicionados atravs de: adicionar cdigo Java, mtodo add (), ou via XML (recomendado).
// Sobrescreva este mtodo da classe Activity de forma a criar itens de menu. @Override public void onCreateContextMenu( ContextMenu menu, // O menu de Contexto a construir View view, // A View pela qual o menu de Contexto ser construdo ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Menu de Contexto"); menu.add(0, Menu.FIRST , Menu.NONE, "menu #1"); menu.add(0, Menu.FIRST + 1, Menu.NONE, "menu #2"); menu.add(0, Menu.FIRST + 2, Menu.NONE, "menu #3"); menu.add(0, Menu.FIRST + 3, Menu.NONE, "menu #4"); } 25

Menu de Contexto (Context Menu)

26

Menu de Opes (Options)


Options Menu :
Aparece quando voc pressiona o boto "Menu" do aparelho. As opes de menu so geralmente o lugar para incluir as funcionalidades bsicas e itens de navegao. Suporta muitos cones. Apenas os seis (6) primeiros itens so exibidos por padro. Clique em "Mais" para ver o resto que falta.

/* Cria os tens de menu sem icones */ public boolean onCreateOptionsMenu(Menu menu) { // O mtodo add() usado neste exemplo pede quatro argumentos: // groupId, itemId, order, e title. menu.add(0, MENU_NEW_GAME, 0, "Novo jogo"); menu.add(0, MENU_QUIT, 0, "sair"); return true; }
27

Sub menus (Sub Menu)


SubMenu :
Permite organizar os itens em grupos. No suporta sub menus aninhados.
public boolean onCreateOptionsMenu(Menu menu) { boolean result = super.onCreateOptionsMenu(menu); // Cria submenu "File" SubMenu fileMenu = menu.addSubMenu("File"); fileMenu.add("Novo"); fileMenu.add("Abrir arquivo"); fileMenu.add("Fechar"); fileMenu.add("Fechar tudo"); // Cria submenu "Edit" SubMenu editMenu = menu.addSubMenu("Edit"); editMenu.add("Desfazer"); editMenu.add("Refazer"); editMenu.add("Cortar"); return result; }
28

AlertDialog ProgressDialog

INTERFACE USURIO (DIALOG)


29

Caixa de Dilogo (AlertDialog)


A AlertDialog uma extenso da classe Dialog. Muitas vezes, constitudo por:
Ttulo Mensagem Botes 1, 2 ou 3
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Voc tem certeza que quer sair ?").setCancelable(false) .setPositiveButton("Sim", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { MyActivity.this.finish(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create();

30

Caixa de Dilogo (ProgressDialog)


Um ProgressDialog uma extenso da classe AlertDialog. Voc pode combinar os botes. Como um boto Cancelar para abortar.

ProgressDialog progressDialog; progressDialog = new ProgressDialog(meuContexto); progressDialog.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("Carregando..."); progressDialog.setCancelable(false);


31

Toast notification Status bar notification Alarm manager

INTERFACE USURIO (NOTIFICAO)


32

Uma Toast notification uma mensagem que aparece logo em primeiro plano na tela. comparvel a um mini pop-up. No requer nenhuma ao do usurio. Eventualmente clicar e desaparece gradualmente.

Notificao (Toast notification)

33

Toast.makeText( getApplicationContext(), // Contexto R.string.toast_message, // Obter o texto a exibir Toast.LENGTH_LONG).show(); //Exibir a mensagem show()

Notificao (Status Bar Notification)


executada frequentemente em trs etapas e em plano de fundo: Etapa #1 : Status Bar Notification acrescenta uns pequenos cones (com ou sem mensagem) barra de status do Sistema. Etapa #2 : Quando o usurio clica no cone ou mensagem, o detalhe da notificao exibido. Etapa #3 : Quando o usurio clica no detalhe, a ao definida (geralmente um Activity) desencadeada. Pode-se associar um som, uma vibrao ou qualquer outra opo oferecida pelo aparelho utilizado.

34

Notificao (Alarm Manager)


A classe AlarmManager permite o acesso aos servios de gesto dos alertas. possvel programar o tempo e a frequncia de envio de alertas. Pode-se tambm especificar o componente de destino para ser implementado, se for o caso.

35

O que uma atividade ? Declarao de Atividade no arquivo de manifesto Atividade e Aplicao O ciclo de vida de uma Atividade

ACTIVITY

36

Activity (O que ?)
Activity (atividade) representa uma tela (semelhante a Form) pode apresentar um pedido para o usurio. Para aplicaes mais complexas, havero, portanto, Activities. Ex: Uma aplicao para o envio de SMS apresentar:
Atividade de uma lista de contatos Atividade para escrever uma mensagem Uma Atividade para listar as mensagens antigas, etc.

Atividade versus View


As views so componentes grficos que permitem a interao do usurio e da atividade.

Atividade versus Aplicao


Uma Aplicao consiste em uma ou mais atividades

No caso de vrias atividades, uma delas ser marcada para ser apresentada primeiro para o usurio ao iniciar o aplicativo.
37

Activity (Declarao no arquivo Manifest)


Cada activity deve ser declarada no arquivo de Manifest Caso contrrio, um erro ser exibido (Activity Not Found)
<?xml version="1.0" encoding="utf-8"?> <manifest . . . > <application . . . > <activity android:name="com.project.MyActivity" android:icon="@drawable/small_pic.png" android:label="@string/freneticLabel" . . . > </activity> . . </application> </manifest>
38

Atividade (Ciclo de Vida)


Existem quatro estados possveis do ciclo de vida de uma Atividade:
Ativas: quando a atividade est em primeiro plano visvel, recebe o foco na entrada do usurio. Pausada: Quando a atividade no mais o foco, mas ainda visvel na tela. Este o caso quando, outra atividade transparente ou que no ocupa toda a tela se torna ativa. Parada: Quando uma atividade j no visvel na tela. Ela permanece na memria e mantm todas as informaes do estado. Esta atividade suscetvel de ser encerrada pelo sistema para liberao de recursos. Inativa : Uma atividade est inativa ou morta antes de ser lanada. Os inativos de atividade so removidos da pilha.

A pilha de atividades gerenciada pelo sistema.


Uma atividade recm-lanada automaticamente colocada no topo da pilha.
39

Atividade (Ciclo de Vida)

40

APLICAO E RECURSOS
O que so recursos? Externalizao de recursos Padro vs. Recursos alternativos Onde colocar os meus recursos ?
41

Recursos (O que so?)


Todos os dados estticos que podem ser externalizados do cdigo Java
Leiautes Strings (Cadeia de caracteres) Imagens Vdeo e audio etc...

42

Recursos (Externalizao)
Permite manter os recursos fora do cdigo Java. Permite fornecer recursos alternativos de acordo com o usurio ou equipamentos utilizados:
Gesto de mltiplos idiomas Gesto de diferentes tamanhos de tela

ainda mais importante, dada a proliferao de dispositivos que suportam o Android.


43

Para todos os tipos de recursos, possvel especificar um padro e diversas alternativas para a mesma aplicao.
Os recursos alternativos sero utilizados independentemente da configurao do aparelho, ou quando no houver recursos alternativos para uma determinada configurao. Os recursos alternativos sero utilizados para casos especficos e predeterminados..
Duas configuraes utilizando os recursos padro Duas configuraes das quais uma utiliza os recursos alternativos

Recursos (Alternativa)

44

Resources (res/)
Cada tipo de recurso deve ser colocado em uma subpasta da pasta res Ex :
Meuprojeto/ src/ MinhaAtividade.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

45

Sistema de armazenamento de dados Preferncias (SharedPreferences) Armazenamento interno Armazenamento externo Base de dados

ARMAZENAMENTO DE DADOS

46

Dados (Sistema de Armazenamento)


A plataforma Android oferece diferentes formas de armazenar dados de uma aplicao, conforme a necessidade. Exemplos:
Os dados devem ser privativos para uma aplicao; Os dados devem ser acessados por outras aplicaes; O tamanho dos dados a serem armazenados, etc
47

Dados (Preferncias)
Dados primitivos so guardados no formato de chave=valor. A classe SharedPreferences fornece ferramentas para armazenar e recuperar informaes no formato chave=valor. Podemos usar a classe SharedPreferences para armazenar dados de tipo primitivo, exemplo:
boolean, float, int, long e string

Os dados so persistidos atravs das sesses de usurio, e ficam disponveis mesmo com o aplicativo fechado.
48

Dados (Armazenamento Interno)


Permite armazenar dados privados diretamente na memria do telefone. Os arquivos armazenados no telefone podem ser utilizados apenas pela sua aplicao. Quando o aplicativo desinstalado, os arquivos armazenados so automaticamente excludos.
String FILENAME = "ola_arquivo"; String string = "Oi mundo !"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close();

49

Dados (Armazenamento externo)


Permite armazenar dados pblicos em espaos compartilhados. Todos os telefones Android suportam esse modo de armazenamento compartilhado atravs de:
Entrada USB Carto de memria Sistema de arquivos interno.

50

Arquivos armazenados dessa forma so acessveis a todos (hardware, software, utilitrios) e podem ser modificados pelo usurio, por exemplo, durante a transferncia para seu computador.

Dados (Banco de dados)


Permite armazenar dados em de forma estruturada de banco de dados privado. O padro Android vem com o suporte completo ao banco de dados SQLite (na configurao Zero)
- SQLite equipado tambm para administrar as consultas SQL transacionais.

Todos os bancos criados e armazenados sero acessveis a todas as aplicaes (mas no fora da aplicao).
51

Dados (Banco de dados)


private static final String DATABASE_NAME = "meuDB.db"; private static final String DATABASE_TABLE_NAME = "PAIS"; private static final String DATABASE_CREATE_TABLE = "create table " + DATABASE_TABLE_NAME + " (_id integer primary key autoincrement, " + " country_name text not null, " + " capital_city text not null)"; // Abre uma nova conexo SQLiteDatabase neste conexto da aplicao // Cria um arquivo de base de dados se ainda no existir. SQLiteDatabase myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null); // Cria a tabela myDB.execSQL(DATABASE_CREATE_TABLE);

============================================================ SQLiteDatabase myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null); // Insere uma nova linha na base de dados. ContentValues newRow = new ContentValues(); newRow.put("country_name", "Brasil"); newRow.put("capital_city", "Braslia"); myDB.insert(DATABASE_TABLE_NAME, null, newRow);
52

Plataforma Android para udio e vdeo Reproduo de udio e vdeo Formatos de mdias suportados

MDIA(UDIO E VDEO)

53

Mdia (udio e Vdeo)


Android oferece uma plataforma completa para codificar/decodificar vrios tipos de mdias. O mesmo mecanismo de acesso que utilizado por todos os outros recursos. Ele facilita a integrao de imagens, vdeos e msicas em aplicaes terceiras.
54

Mdia (Leitura de udio e Vdeo)


A leitura de mdias pode ocorrer de diversas fontes:
O diretrio de recursos: /res/raw
MediaPlayer mp = new MediaPlayer(); MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); mp.start();

O sistema de arquivos: Local (PATH) ou Rede(URL)


MediaPlayer mp = new MediaPlayer(); mp.setDataSource(PATH_TO_FILE); mp.prepare(); mp.start();
55

Mdia (Formatos suportados)


udio
AAC LC/LTP, HE-AACv1 (AAC+), HE-AACv2 (enhanced AAC+), AMR-NB, AMR-WB, MP3, MIDI, Ogg Vorbis, PCM/WAVE

Vdeo
H.263, H.264 AVC, MPEG-4 SP

56

Qual o servio? Servios locais Servios remotos

SERVIOS EM SEGUNDO PLANO


57

Servios (O que ?)
Algumas aplicaes precisam continuar executando em segundo plano, sem a interveno do usurio. Estes processos de fundo continuam funcionando mesmo quando o telefone est ocupado com outras tarefas ou atividades.

58

Servios (Locais e Remotos)


Servios Locais
No so acessveis a partir de outras aplicaes. Executam no mesmo processo que a aplicao executa.

Servios Remotos
So acessveis a outras aplicaes Disponveis a outras aplicaes por meio do AIDL (Android Interface Definition Language).
59

Servios de geolocalizao Simulao dos dados de geolocalizao Google Maps (biblioteca externa)

GEOLOCALIZAO E MAPAS

60

Geolocalizao e Mapas

(Servios)

As principais tcnicas utilizadas pelo Android para determinar a posio atual de um dispositivo so as seguintes:
Location Manager : Fornecimento de ganchos (pontos de entrada) aos servios de geolocalizao com os objetivos de:
Obter sua posio atual Monitorar movimentos durante um perodo determinado Salvar ou excluir os dados de localizao periodicamente atravs do LocationProvider Executar alertas de proximidade ao se aproximar de uma zona especfica

61

Location Providers : Cada Fornecedor de Posio representa uma tecnologia de localizao da posio do aparelho.

Geolocalizao e Mapas
posio)

(Simulando uma

Utilizar o DDMS (Dalvik Debug Monitor Service) do Eclipse na perspectiva DDMS para :
Enviar manualmente os dados de localizao (longitude/latitude) do LocationProvider

Utilizar um arquivo GPX (GPS Exchange Format) que descreve a rota simular. GPX um arquivo XML responsvel pela comunicao dos dados GPS Utilizar o arquivo KLM que descreve os pontos de referncia para a sequncia de leitura. Utilizar GEO em linha de comando. Acessvel atravs do console emulador do Android, que permite a simulao de posies.
62

Geolocalizao e Mapas

(Google Map)

Baseado na classe : com.google.android.maps.MapView Permite adicionar os recursos oferecidos pelo Google Maps diretamente em sua aplicao. Exibe um mapa com os dados obtidos a partir do Google Maps. Controle do Zoom (controles de toques na tela) Fornece todos os elementos de interface grfica necessrios ao usurio para controle dos mapas. Cadastro de aceitao de uso (licena) , necessria para utilizao dos do Google Maps.

63

HttpClient API Invocation styles (in HttpClient API) Formato de Resposta

WEB SERVICE E NUVEM

64

Web services (HttpClient API)


Baseado no Apache HTTP package Fornece uma interface para um client HTTP Suporte multitarefa Suporte ao modo Sncrono e Assncrono
public abstract HttpResponse execute (HttpUriRequest request)

Response Formats
XML JSON RSS, Atom

XML Parsing
SAX DOM Pull-parser
65

Web services (HttpClient API)


Cdigo de Exemplo - Sncrono HttpClient httpclient = new DefaultHttpClient(); // Prepara o objeto request HttpGet httpget = new HttpGet(url); // Executa o request HttpResponse response; try { response = httpclient.execute(httpget); // Obtem o response entity HttpEntity entity = response.getEntity(); if (entity != null) { // Uma simples resposta de leitura JSON InputStream instream = entity.getContent(); result = convertStreamToString(instream);
66

Web services (HttpClient API)


Cdigo de Exemplo - Assncrono HttpClient httpclient = new DefaultHttpClient(); // Prepara o objeto request HttpGet httpget = new HttpGet(url); try { ResponseHandler<String> mResponseHandler = new BasicResponseHandler(); result = httpclient.execute(httpget, mResponseHandler);

67

Os princpios de segurana do Android As permisses

SEGURANA E PERMISSES

68

Segurana e permisses
O padro nenhum aplicativo autorizado a executar operaes que tero efeito negativo sobre outras aplicaes, ou sistema operacional, ou alterar a experincia do usurio. Cada aplicativo executado em um processo exclusivo para ele e fechado.
Ele no pode interferir com outras aplicaes, a menos que seja expressamente autorizada a utilizar os recursos no previstos por padro. EX : Gerenciar SMS
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> </manifest>
69

Tradutores
A traduo deste material foi realizada de forma colaborativa e voluntria pela equipe do DFJUG www.dfjug.org, em Maio de 2011. Daniel deOliveira Daniel Wield Francisco Marcio da Silva Kete Martins Rufino Marcos Aires Natali Silverio Patrick Nascimento Silvani Neri
70

Renncia Legal
Partes desta apresentao so modificaes baseadas nos trabalhos compartilhados por: Projeto de Cdigo Aberto Android
> http://code.google.com/policies.html

The Java Passion


> http://www.javapasion.com

Reto Meier autor do livro Android 2 Foram usados de acordo com os termos descritos na licena Creative Commons 2.5 > http://creativecommons.org/licenses/by/2.5/

Você também pode gostar