Buscar

Java e Java em Android

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1Android
Android 2
Egydio Geraldo Passarelli Donati
Vice Presidente
Aguinaldo Silva 
Diretor de P&D
José Melo de Oliveira - 
Governador do Estado do Amazonas
Afonso Lobo Moraes
 Secretário de Estado de Fazenda
Rossieli Soares da Silva
Secretário de Estado de Educação
Isa Assef dos Santos 
Diretora -Presidente
Niomar Lins Pimenta
 Diretor de Tecnologia e Pesquisa
EXPEDIENTE
3Android
O avanço tecnológico, aumentando o poder de processamentos de dispositivos 
móveis, tem impulsionado a busca pela criação de aplicativos que atendam à 
necessidades desse novo público consumidor. Neste cenário, o Android, sistema 
operacional criado e mantido pela Google, se destaca como o atual líder de 
mercado, quando consideramos o número total de aparelhos quem levam o sistema 
do robozinho mais famoso da atualidade.
O Curso de Linguagem de Programação - Android foi criado para oferecer 
aos alunos a oportunidade de conhecer e praticar técnicas para desenvolvimento 
de aplicativos, voltadas para uma das plataformas quem mais crescem no mercado 
mobile. Neste curso, o aluno é guiado pelo mundo da criação de aplicativos com 
interfaces ricas e funcionais, adaptáveis a dispositivos como Tablets e Smartphones.
Iniciaremos apresentando características e fundamentos da plataforma 
Android, discutindo aspectos como mercado, aplicabilidade e histórico da sua 
evolução, permitindo que o aluno identifique as características que nos motivam ao 
desenvolvimento voltado a dispositivos móveis.
Ao longo do curso, criamos uma aplicação completa, onde o aluno tem a 
oportunidade de desenvolver seu primeiro aplicativos Android, aprendendo a 
combinar componentes da linguagem, regras de negócio e lógica de programação. 
Durante o processo de desenvolvimento, o aluno aplica conceitos como: 
planejamento de software, usabilidade e persistência em banco de dados.
Prof. M.Sc. Marcio Palheta Piedade
Apresentação da Disciplina VANDROID
Android 4
5Android
Android 6
Neste capítulo, apresentamos umas das principais linguagens de 
programação da atualidade, a Java, que revolucionou o desenvolvimento 
de programas com uma proposta de arquitetura robusta, segura e de 
fácil adaptação, fortemente recomenda para projetos críticos, de médio 
e de grande porte.
UNIDADE 1 Introdução ao Java
7Android
 1. O que é o Java
Em 1991, a empresa Sun Microsystems financiou um projeto coorporativo 
chamado Green, chefiado por James Gosling, que gerou como resultado 
uma nova linguagem de programação, baseada em C e C++, chamada de 
OAK, que quer dizer “carvalho”, em homenagem a uma grande árvore de 
carvalho que era avistada a partir da janela da Sun. Contudo, o time de 
projeto descobriu que a existência de outra linguagem chamada Oak e, em 
visita a uma cafeteria, surgiu a ideia do nome Java, em homenagem a um 
tipo de café da cidade de origem, muito apreciado pelos programadores 
daquele time.
Em 2009, a Sun foi comprada pela empresa Oracle, e o Java passou 
a ser mantido pelo comitê Java Community Process – JCP, que divulga 
suas atualizações e normas no site www.jcp.org.
2. Orientação de um Programa em Java
A arquitetura proposta pela linguagem Java garante que um programa 
possa ser desenvolvido para rodar em qualquer sistema operacional, sem 
a necessidade de reescrita de código fonte. Sendo assim, um programa 
desenvolvido para rodar em Linux também pode ser executado em Mac 
OS ou Windows. Mas para entendermos como isso é possível, precisamos 
entender como um programa Java é construído.
Um programa Java é composto por um conjunto de arquivos de 
código fonte, que terminam com a extensão “.java”, e bibliotecas de 
terceiros, distribuídas em arquivos com a extensão “.jar”. Para que o novo 
programa possa ser executado, o compilador Java ( javac) transforma 
o código “.java“ em arquivos codificados, chamados de bytecode, 
armazenados em arquivos com a extensão “.class”.
A figura 1 mostra a composição inicial de um programa Java.
 Figura 1. Programa Java
Código Fonte
 (.java)
Bibliotecas
(.jar)
Bytecode
(.class)
Android 8
3. Máquina Virtual
Uma pergunta interessante, para todo iniciante em Java, é: Como é que o 
mesmo código fonte pode rodar em sistemas operacionais diferentes? A 
resposta é simples: O time de desenvolvimento da Sun criou uma Máquina 
Virtual capaz de interpretar o código fonte e executá-lo de acordo com o 
sistema operacional do usuário. 
O papel da máquina virtual do Java (ou Java Virtual Machine - JVM) 
é receber o Bytecode de um programa Java e gerar o arquivo binário para 
o sistema operacional em que desejamos executar a aplicação. Para isso, 
a Sun desenvolveu uma JVM para cada sistema operacional, garantindo 
esse aspecto multiplataforma da Java.
Na figura 2, apresentamos a estrutura completa para execução de 
um programa Java.
Android 8
Figura 2 - Estrutura de Execução de Programas Java
Código Fonte
 (.java)
Bibliotecas
(.jar)
Processo de compilação
(javac)
Bytecode
(.class)
JVM para
Mac OS JVM para
Linux
JVM para
Windows
Sistema
Operacional
Mac OS
Sistema
Operacional
Linux
Sistema
Operacional
Windows
9Android
4. Java e a “Sopa de Letrinhas”
Outro problema enfrentado por programadores iniciantes em Java é: para 
começar a programar em Java, que pacote eu devo baixar?
A JVM, naturalmente, é um dos requisitos necessários para execução 
e desenvolvimento de aplicações Java. Porém, a Sun entendia que nem 
todos os usuários que precisam da Java são programadores e dividiu a 
distribuição em dois pacotes: JDK e JRE.
O Java Runtime Environment – JRE é o ambiente para execução 
de aplicações Java e traz um pacote de arquivos contendo a JVM e várias 
bibliotecas e programas utilitários. 
O Java Development Kit – JDK é o kit para desenvolvimento de 
aplicações Java e traz, além da JVM, arquivos utilitários como o JAVAC, 
que é o compilador utilizado para gerarmos o bytecode.
Atualmente, o Java encontra-se na versão 1.8 e seus pacotes para 
desenvolvimento podem ser baixados no site oficial da linguagem: http://
www.oracle.com/technetwork/java/.
5. Java em Projetos Diferentes
A linguagem Java pode ser utilizada para o desenvolvimento de 
aplicações nos segmentos de WEB, Desktop ou Mobile. Para garantir essa 
característica, a Application Programming Interface – API (ou Interface de 
Programação de Aplicações) da Java está dividida em:
• Java Standard Edition – JSE: versão fundamental da Java, usada 
para o desenvolvimento de aplicações Desktop. O conhecimento dessa 
versão é essencial para o entendimento e desenvolvimento de aplicações 
Móveis e Web. Nesta apostila, apresentamos conceitos da JSE necessários 
ao desenvolvimento de Android Apps;
• Java Enterprise Edition – JEE: versão da API Java para o 
desenvolvimento de aplicações distribuídas. Essa versão traz ferramentas 
e conceitos necessários para o desenvolvimento de aplicações Web 
baseadas e Java;
• Java Micro Edition – JME: Versão da API Java para o 
desenvolvimento de sistemas embarcados em microcontroladores ou 
Android 9
Android 10
telefones celulares. Atualmente, o desenvolvimento para dispositivos 
móveis está limitado a alguns modelos da série 60 de telefones Nokia.
6. Meu primeiro programa Java
Agora que tivemos uma visão geral acerca da linguagem Java, vamos 
iniciar o desenvolvimento do nosso primeiro programa.
É um costume entre os programadores que o primeiro programa 
desenvolvido em uma nova linguagem seja chamado de Hello World 
(ou olá, mundo). Seguindo essa tradição, vamos criar o nosso arquivo 
HelloWorld.java, no qual queremos apenas imprimir uma mensagem 
“Hello, world!” no terminalou console da máquina do usuário.
Um programa Java é fundamentalmente composto por:
A figura 3 apresenta detalhes do nosso primeiro programa Java.
Android 10
Figura 3 - HelloWorld.java
• Classe pública: Classe principal do sistema, no qual vamos executar o nosso código fonte.
A classe e o arquivo .java em que ela foi escrita devem possuir o mesmo nome;
• Blocos de comandos: conjunto de linhas de programa, no qual implementamos a lógica
da nossa aplicação. Iniciam com “{” e terminam com “}”;
• Linhas de comando: Linha contendo comandos que devem ser executados em nosso
programa. Ao �nal de uma linha de comando, devemos incluir “;”;
• Métodos: representam funções ou procedimentos da programação estruturada. Para
facilitar o desenvolvimento e a manutenção dos nossos programas, dividimos a aplicação
em vários métodos distintos, nos quais cada um tem um papel bem de�nido.
11Android
UNIDADE 2Orientação a Objetos 
Neste capítulo, apresentamos aspectos fundamentais da Programação 
Orientada a Objetos em Java.
Android 12
1. Declaração de Variáveis e Tipo de Dados
A definição de varáveis em Java segue o mesmo padrão adotado em 
linguagens com C e C++: Precisamos definir o tipo da variável e o seu 
nome. Para atribuir um valor para uma determinada variável usamos o 
sinal de igualdade: “=”
A figura, a seguir, apresenta um exemplo de como definir e atribuir 
valores às nossas variáveis:
Segundo o manual de “Boas práticas de programação”, devemos 
escolher nomes de variáveis que sejam intuitivos, a fim de aumentar a 
legibilidade do nosso código fonte. Contudo, quando trabalhamos com 
Java, precisamos seguir mais algumas regras para nomenclaturas de:
• Classes: devem iniciar com a primeira letra maiúscula
• Métodos, atributos e variáveis: inicial minúscula. 
• Caso o nome seja composto por duas ou mais palavras, a inicial de 
cada nova palavra deve ser maiúscula. Como exemplo, temos o método 
puxarCorda() e a classe ContaBancaria.
 Os tipos primitivos de variáveis em Java são apresentados na tabela 1:
Figura 4 - Declaração e Atribuição de Valores
Sintaxe: tipoVariavel nomeVariavel;
Exemplo: int idade;
Atribuição de valor = 15;
 §
 §
 §
Tabela 1 - Tipos Primitivos
Classi�cação Tipo Intervalo de Valores
Lógico boolean true (verdadeiro) ou false (falso)
 byte - 128 a 127 (8 bits)
 short - 32768 a 32767 (16 bits) 
 int - 2147483648 a 2147483648 (32 bits) 
 long - 263 a (263) -1 (64 bits)
 �oat 1.40239846-46 a 3.40282347-38 (32 bits) 
Inteiro
Ponto Flutuante
 double 4.9406564584-324 a 1.7976931348-308 (64 bits)
Caracter char Caracteres Unicode (16 bits)
13Android
2. Estruturas Condicionais
A tomada de decisão é um aspecto que está presente no nosso dia a dia. 
Por exemplo, se temos um dia de sol, vamos à praia; Se não, ficamos em 
casa. Neste caso do cotidiano, executamos uma ação (ficar em casa ou 
ir à praia) de acordo com uma condição (hoje é dia de sol). Em Java, as 
estruturas condicionais são if-else e switch-case e seguem o padrão da 
linguagem C, conforme apresentado na figura 5.
3. Laços de Repetição
A fim de facilitar a repetição de um determinado bloco de comandos, 
as linguagens de programação oferecem estruturas conhecidas como 
laços de repetição. Em Java, os laços de repetição seguem o formato da 
linguagem C, conforme apresentado na figura 6.
13
Figura 5 - Sintaxe de Estruturas Condicionais
Sintaxe:
if (expressão boolena) {
 bloco de instruções
} else if (expressão booleana) {
 instruções
} else {
 instruções
}
Sintaxe:
switch (seletor_inteiro) {
 case valor_inteiro_1:
 instruções;
 break;
 case valor_inteiro_2:
 instruções;
 break;
 (...)
 default:
 instruções;
}
Figura 6 - Sintaxe de Laços de Repetição em Java
while ( expressão boolena ) 
{
 instruções;
} 
do 
{
 instruções;
} while ( expressão boolena );
for ( inicialização;
 expressões booleanas;
 passo da repetição )
{
 instruções;
}
Android 14
4. Classes, Objetos e Métodos
Agora que concluímos a parte estruturada do Java, vamos conhecer um 
pouco das teorias acerca da Orientação a Objetos – OO, através das 
quais resolveremos problemas do mundo real a partir da interação de 
seus objetos. 
Objetos são “coisas” do mundo real, que podem realizar ações, 
chamadas de métodos e possuem características próprias, chamadas 
de atributos, e são agrupadas de acordo com seus tipos, chamados de 
classes.
A tabela 2 apresenta um exemplo da relação entre os três 
componentes de um objeto, na qual podemos perceber que todo objeto 
da classe Pessoa possui Nome, E-mail, Endereço, RG, CPF e pode executar 
as ações de acordar, dormir e comer. Ou seja, qualquer objeto da classe 
pessoa tem o mesmo grupo de características e pode executar o mesmo 
conjunto de ações.
Em projetos de software, classes são representadas através de 
diagramas e implementadas em códigos fonte. Na figura 7, apresentamos 
representações da classe Conta Bancária, geradas a partir de uma 
ferramenta de modelagem de sistemas (à esquerda) e uma ferramenta 
de criação de código fonte (à direita).
Figura 7 - Representações das Classes Conta Bancária
 Conta Bancaria
- agencia : string
- numero : string
- saldo : double
+ sacar() : void
+ depositar() : void
+ transferir () : void
Tabela 2 - Relação entre Classes, Atributos e Métodos
Classe Atributos (Características) Métodos (Ações)
Pessoa Nome, Endereço, E-mail, RG, CPF Acordar, Dormir, Comer
Conta Bancaria Agência, Número da Conta, Saldo Sacar, Transferir, Depositar
Carrro Marco, Cor, Modelo, Ano, Motor Ligar, Parar, Acelerar 
 
15Android
5. Encapsulamento e Modificadores de Acesso
O uso de OO em desenvolvimento de sistemas se tornou popular 
por oferecer um conjunto de vantagens como: Aproximar os dados 
(atributos) das ações que podem ser executadas (métodos) e garantir 
maior segurança dos dados. Encapsulamento é um conceito de OO em 
que a segurança dos atributos é feita através da limitação de acesso. 
Nesse conceito, apenas métodos da própria classe podem manipular seus 
atributos. A limitação de acesso em Java é feita a partir do modificador 
de acesso “private”. 
O acesso externo a atributos de uma classe ocorre a partir de 
métodos públicos, conhecidos como GET e SET, em que métodos de GET 
devolvem o valor do atributo e métodos de SET são usados para atualizar 
seu valor.
A figura 8 apresenta um exemplo da implementação de 
encapsulamento.
Android 15
Figura 8 - Encapsulamento na Classe ContaBancaria
Android 16
Após a implementação da classe ContaBancaria, com a definição 
de seus métodos e atributos, podemos criar seus objetos. Para isso, 
utilizamos a palavra reservada “new”, que indica para a JVM que um novo 
objeto deve ser criado na memória. No exemplo da Figura 9, a variável 
“conta” é usada para acesso ao objeto criado.
6. Herança e Poliformismo
Outra vantagem de OO é o reuso de código, no qual podemos definir 
classes genéricas, com métodos e atributos comuns, e reaproveitar esse 
código em classes filhas, que herdam as características de sua classe pai.
A implementação de herança em Java é feita a partir o uso da palavra 
reservada “extends”,que indica para a JVM quem é a classe pai, de onde 
devem ser herdados métodos e atributos.
Imagine que em um sistema de cadastros, temos usuários que são 
engenheiros e outros que são médicos. Todos os usuários possuem Nome, 
E-mail e senha. Além desses dados, Engenheiros possuem o número do 
CREA e Médicos possuem CRM. 
Para resolver o problema exposto acima, vamos criar uma classe 
Usuario com os dados comuns a todos os usuários e duas classes filhas, 
Medico e Engenheiro, que implementam apenas o código necessário a 
cada uma delas.
A figura 10 apresenta um diagrama de classes com a nossa arquitetura 
e o código fonte para as classes Usuario, Medico e Engenheiro.
Figura 9 - Manipulação de Conta Bancária
17Android
7. Interfaces e Classes Abstratas
Em Java, podemos criar classes especiais que não podem ser instanciadas 
com “new”, servindo apenas de modelo para classes filhas. Nessas classes, 
podemos criar métodos especiais que as classes filhas são obrigadas a 
implementar. A essa parte da teoria chamamos de Classe Abstrata.
A definição de classes e métodos abstratos em Java ocorre com o uso 
da palavra “abstract”. Ao marcar uma classe como abstrata, informamos 
à JVM que a classe pode ser estendida por outras, mas não instanciada. 
Já na marcação de métodos abstratos, usamos a palavra “abstract“ e 
definimos apenas a assinatura do método, pois a sua implementação 
será feita pela classe filha.
Figura 10 - Implementação da Herança em Java
 Usuário
+ autenticar(senha : int) : boolean
- nome : string
- email : string
- senha : double
Engenheiro
- crea : int
Medico
- crm : int
public class Usuario {
 private String nome;
 private String email;
 private int senha; 
 //Método para autenticação de usuários
 public boolean autenticar (int senha){
 return this.senha == senha;
} 
 //Método de get e set omitidos
//Classe �lha da classe Usuário
public class Engenheiro extends Usuario {
 //Atributos especí�cos de Engenheiro
 private int crea ;
 //Método de get e set omitidos
 
//Classe �lha da classe Usuário
public class Medico extends Usuario {
 //Atributos especí�cos de Medico
 private int crm ;
 //Método de get e set omitidos
 
Android 18
Vez por outra, precisamos assinar um contrato entre os 
programadores do nosso sistema. Em OO, esse contrato é assinado a 
partir de Interfaces. Quando uma classe declara que implementa uma 
interface, essa classe é obrigada a implementar todos os métodos 
assinados na interface.
Em Java, não temos o conceito de herança múltipla, ou seja, uma 
classe só pode ter uma classe pai. Contudo, uma classe pode implementar 
várias interfaces.
A figura 11 mostra que a classe Engenheiro é filha da classe abstrata 
Usuario e implementa a interface Jogador.
8. Coleções, Listas e Mapas
Em desenvolvimento de aplicações, é comum a necessidade de agrupar 
dados em vetores estáticos ou dinâmicos, a fim de facilitar o acesso e a 
manipulação. 
A Java traz uma API chamada Collection, que possui a interface List, 
utilizada para armazenamento de objetos em memória. A implementação 
de List mais utilizada para a manipulação de Objetos é a classe ArrayList, 
em que os objetos são agrupados de acordo com a ordem de inclusão 
na lista.
Figura 11 - Criação de Interfaces e Classes Abstratas
 Usuário
+ autenticar(senha : int) : boolean
- nome : string
- email : string
- senha : double
Engenheiro
- crea : int
Medico
- crm : int
public class Usuario {
 private String nome;
 private String email;
 private int senha; 
 //Método para autenticação de usuários
 public boolean autenticar (int senha){
 return this.senha == senha;
} 
 //Métodos de get e set omitidos
//Classe �lha da classe Usuário e
//Implenta a interface Jogador
public class Engenheiro extends Usuario implements Jogador {
 private int crea;
 //Implentação do método da interface Jogador
 @Override
 public void malhar () {
 System. out.println (”Hora de Malhar”);
}
 
//De�nição da Interface
public interface Jogador {
 //Método a ser implementado
 public void malhar( ) ;
}
Jogador
19Android
O trabalho com coleções de dados é composto pelos seguintes 
comportamentos essenciais:
• Definição da variável do tipo List;
• Criação do Objeto ArrayList;
• Inclusão de Objetos na lista;
• Exclusão de Objetos da lista;
• Acesso a um determinado objeto;
• Percorrer a lista, acessando todos os objetos.
A figura 12 apresenta um trecho de código Java que implementa o 
acesso a uma lista de objetos do Tipo Engenheiro.
Android 19
Figura 12 - Manipulação de Coleção de Engenheiros
Android 20
UNIDADE 3Visão Geral de Desenvolvimento Mobile 
A evolução tecnológica e aumento do poder de processamento de 
dispositivos móveis, como smartphones e tablets, levou a humanidade 
a uma nova era de comunicações, em que o acesso à informação é 
facilitado e amplamente divulgado. Neste cenário, empresas do setor 
de telecomunicações têm buscado oferecer serviços de infraestrutura 
de maior qualidade, visando garantir o fluxo constante de informações.
21Android
1. Desenvolvimento de Aplicativos para Dispositivos Mobile
Com maior poder de processamento, os dispositivos móveis se tornaram 
alvo de outra grande evolução: A corrida para desenvolvimento de 
aplicativos móveis. Hoje em dia, é comum encontrarmos pessoas 
utilizando celulares ou tablets para acessar e-mails, serviços de envio de 
mensagem ou mesmo para se divertir com algum novo jogo eletrônico. 
A indústria de desenvolvimento de aplicativos móveis tem realizado 
campanhas para disseminar suas tecnologias de desenvolvimento e 
aumentar o número de desenvolvedores, buscando impulsionar o 
número e a qualidade de aplicativos disponíveis para download em suas 
lojas virtuais.
A tabela 3 apresenta dados de uma pesquisa do Gartner Group 
(importante instituto de pesquisas internacionais), publicada em fevereiro 
de 2014, na qual podemos verificar o elevado número de smartphones 
vendidos entre os anos de 2013 e 2012, agrupados por sistema operacional.
2. Coleções, Listas e Mapas
Ao iniciarmos no desenvolvimento de aplicativos (APP), precisamos nos 
lembrar de algumas premissas essenciais ao projeto de softwares, que 
aumentam as chances de sucesso das aplicações. 
Tabela 3 - Vendas de Smartphones para Usuários Finais por Sistema Operacional
Sistema Operacional 2013 2012 
Android 758,719.9 451,621.0 
iOS 150,785.9 130,133.2
Microsoft 30,842.9 16,940.7
 
Total 967,775.8 680,108.2 
Outro SOs 8,821.2 47,203.0
BlackBerry 18,605.9 34,210.3 
Android 22
Arquitetura robusta e incremental
Na criação de aplicativos, é comum o aumento do escopo do projeto, 
ao longo dos ciclos de desenvolvimento do produto, em que novas 
funcionalidades podem ser agregadas, como a necessidade de integração 
com o site do fabricante. A arquitetura da App deve ser elaborada de 
forma que a inclusão de novos requisitos não implique grande esforço e 
retrabalho.
Padrões de Projeto e de Boas Práticas de Programação
Muitos dos problemas encontrados ao longo do desenvolvimento de 
aplicativos já foram resolvidos pela comunidade científica, e as soluções 
foram registradas como Padrões de Projetos, por indicarem as melhores 
práticas para resolver problemas, como o tratamento da persistência de 
tabelas de um banco de dados.
Padrões Uso de Frameworks para Aumento de 
Produtividade
É comum que empresas de desenvolvimento de software busquem a 
produção de mais aplicações,no menor tempo possível. Para ajudar nesse 
processo, grupos de desenvolvimento criam ferramentas que automatizam 
parte do trabalho dos programadores, chamadas frameworks.
3. Apresentação do Android
Entre os Sistemas Operacionais – SO para dispositivos móveis, o Google 
Android é o que mais se destaca pelo seu crescimento nos últimos 
anos, conforme demonstrado na tabela 4, onde são apresentados os 
percentuais de mercado de cada um dos principais SOs.
Tabela 4 - Percentuais de Mercado por SO
Sistema Operacional 2013 (%) 2012 (%)
Android 78.4 66.4 
iOS 15.6 19.1
Microsoft 3.2 2.5
Total 100.0 100.0 
Outro SOs 0.9 6.9
BlackBerry 1.9 5.0
Android 22
23Android
O crescente número de dispositivos rodando Android tem atraído 
o interesse de empresas desse segmento, aumentando a demanda por 
profissionais especialistas em desenvolvimento de aplicativos Android.
Neste curso, apresentamos os conceitos fundamentais para 
desenvolver aplicativos para o SO que mais tem crescido em número de 
dispositivos.
4. Dispositivos Android
O SO Android foi desenvolvido inicialmente para rodar em smartphones, 
e disputou mercado com outro sistemas como iOS e Windows Phone. 
Contudo, o projeto inicial foi evoluído para atender outros dispositivos 
como tablets, óculos, relógios, TVs e veículos.
A figura 13 mostra exemplos de dispositivos nos quais podemos 
encontrar o Android rodando.
Figura 13. Dispositivos Android
Android 24
5. Conhecendo as Ferramentas de Desenvolvimento
O desenvolvimento de aplicações Android ocorre a partir de um Ambiente 
Integrado de Desenvolvimento – IDE, no qual encontramos as ferramentas 
necessárias para facilitar a produção de aplicativos. 
Entre os ambientes de desenvolvimento pagos, encontramos o 
IntelliJ IDEA (https://www.jetbrains.com/idea/), que apresenta uma 
interface amigável e ferramentas de apoio ao desenvolvimento que o 
tornaram IDE padrão para Android Apps em muitos países. 
No Brasil, a IDE padrão ainda é o Eclipse (http://eclipse.org/), por 
ser uma ferramenta de código aberto, grátis, inicialmente proposta pela 
Google para o desenvolvimento de aplicativos Android.
No final de 2014, a Google lançou a sua própria IDE para criação 
de aplicativos, conhecida como Android Studio, com uma proposta 
inovadora e baseada em características importantes do IntelliJ, como uso 
de ferramenta integrada para a criação de builds automáticos.
6. Coleções Instalação e Configuração do Ambiente de Desenvolvimento
A Google utilizou a Java como base para o desenvolvimento Android. 
Com isso, entrou no mercado de aplicativos com um grande número de 
potenciais programadores, que só precisavam entender como a API do 
Android funcionava com a Java. Por isso, como pré-requisito, precisamos 
baixar e instalar o JDK, no site: http://www.oracle.com/technetwork/java/
javase/downloads/index.html. A figura 14 mostra a tela para download 
do JDK.
Figura 14 - Tela para Download do JDK
Build, no contexto do 
desenvolvimento de software, 
é uma versão “compilada” de 
um software ou parte dele 
que contém um conjunto 
de recursos que poderão 
integrar o produto final.
Fonte: Wikipedia
25Android
Agora, podemos baixar e instalar a nova IDE para desenvolvimento 
Android da Google, no site oficial: http://developer.android.com/sdk/
index.html, conforme exibido na figura 15.
Após o download, execute a instalação do Android Studio e crie a 
sua 1a App. Na figura 16, apresentamos as telas de Início da instalação e 
Boas-vindas.
Figura 15 - Tela para Download do Android Studio
Figura 16. Tela iniciais do Android Studio
Android 25
Android 26
UNIDADE 4Programação Móvel com Google Android
Neste capítulo, iniciamos o desenvolvimento utilizando Android, onde 
vamos criar uma aplicação para cadastrar contatos de uma agenda 
telefônica, com os seguintes dados: Nome, Telefone, E-mail, Site, Endereço 
e Foto. Usaremos o banco de dados SQLite, que já vem instalado em 
aparelhos (devices) Android. 
27Android
A figura 17 apresenta as funcionalidades da nossa aplicação de 
cadastro de Contatos, onde, além de manipular os dados de contatos, 
precisaremos trabalhar com a câmera do device e exibir os dados do 
contato em um mapa.
 
1. Meu Primeiro Projeto Android
Agora que sabemos os requisitos que devem ser atendidos pela nossa 
aplicação, vamos criar o nosso projeto no Android Studio. Para isso, inicie 
a IDE e selecione a opção “Start a new Android Studio Project”. Ao final 
de cada comando a seguir, clique no botão Next.
Na tela “Configure your new project”, informe que o nome da 
aplicação (Application Name) é Agenda.
Na tela “Select the form factors your app will run on” selecione a 
opção “Phone and Table”.
Na tela “Add an activity to Mobile”, selecione a opção “Blank 
Activity”.
Na última tela, “Choose options for your new file”, preencha os 
campos e clique em “Finish”:
• Activity Name: FormularioContatoActivity
• Layout Name: formulariocontatolayout
Figura 17 - Funcionalidades do Projeto
Android 28
• Title: Dados do Contato
• Menu Resource Name: menuformulariocontato
Com a execução dos passos acima, o Android Studio cria os arquivos 
necessários à nossa aplicação, exibe a estrutura de pastas (à esquerda), 
uma paleta de componentes (ao centro) e uma tela de device com a 
visualização da app (à direita), conforme exibido na figura 18.
2. Conceitos Fundamentais da Estrutura de Projetos Android
Agora que criamos nossa primeira Android App, vamos entender a 
estrutura de pastas e arquivos gerados.
A pasta manifests armazena o arquivo AndroidManifest.xml, onde 
descrevemos as configurações da nossa App, como, por exemplo, o título 
e o logotipo da aplicação.
A tela de uma aplicação tem a função de servir de interface entre 
o usuário e o sistema. No Android, a tela é composta por dois arquivos 
 Figura 18 - Tela Inicial de Desenvolvimento do Android Studio
29Android
principais: uma Activity, para representar o código fonte da tela, e o seu 
Layout, que indica como os componentes visuais devem ser exibidos na 
tela. 
A classe android.app.Activity é responsável por implementar as 
regras de negócio de uma tela, como criação de componentes e carga de 
menus. O Android Studio usa a classe ActionBarActivity, filha de Activity, 
como classe padrão, por implementar a compatibilidade da App com 
versões anteriores do Android.
Na pasta Java, o Android Studio guarda o código fonte do nosso 
projeto. É nessa pasta que fica a nossa classe FormularioActivity, filha da 
classe ActionBarActivity, responsável pela implementação das regras de 
negócio da tela de cadastro de contatos.
A pasta res é responsável pelo armazenamento de arquivos de 
recursos da nossa aplicação e é composta pelas seguintes subpastas:
• Drawable: pasta de figuras da nossa App. O Arquivo ic_launcher.
png é usado como logotipo da nossa aplicação;
• Layout: armazena os arquivos de tela da nossa App, onde 
descrevemos os componentes que devem ser exibidos em cada tela. 
Nessa pasta, o Android Studio criou a nossa tela formulariocontatolayout.
xml;
• Menu: pasta que armazena os arquivos XML que contém as opções 
de menus da nossa App. O menuformulariocontato.xml está nessa pasta.
• Values: pasta que armazena arquivos de propriedades da aplicação:
• Values/Dimens.xml: arquivo de propriedade de dimensões de 
componentes.
• Values/Strings.xml: arquivo de internacionalização (i18n), 
utilizado para descrevermos os textos que desejamos exibir na App,de 
acordo com o idioma configurado no device.
• Values/Styles.xml: arquivo de definição de propriedade de estilos 
da App, contendo padrões de cores e formas.
Android 30
 3. Componentes de Tela
Agora que sabemos o que foi gerado pelo Android Studio, vamos criar o 
nosso formulário de cadastro de Contatos, onde o usuário da aplicação 
poderá informar os dados que serão salvos no banco de dados.
Telas de aplicativos Android são criadas a partir da combinação de 
conjuntos de componentes visuais, utilizados para facilitar a interação 
entre usuário e sistema. Nesse ponto do desenvolvimento o time de 
projeto, mais especificamente o designer de interfaces, deve se preocupar 
em garantir que a interface seja simples, e intuitiva, de forma a garantir 
uma boa experiência para o usuário.
A tela de cadastro da nossa aplicação deve exibir um componente 
de imagem, onde será exibida a foto do contato e permitir que o usuário 
informe seus dados: Nome, telefone, endereço e site, conforme exibido 
na figura 19. 
Figura 19 - Formulário de Cadastro de Contatos
31Android
O agrupamento de componentes visuais em Android fica a cargo 
dos containers como o LinearLayout, que organiza os componentes 
conforme sua orientação: vertical ou horizontal. No nosso formulário, 
queremos que os componentes apareçam um abaixo do outro. Para isso, 
usaremos o LinearLayout na orientação Vertical.
A foto do contato será carregada do device e exibida em um 
componente ImageView. Esse componente tem a propriedade 
android:src, onde o programador informa o caminho para a imagem que 
deve ser exibida.
A edição de dados será realizada a partir de caixas de texto, onde 
o usuário da aplicação poderá informar os dados de cada contato. Essas 
caixas de texto são componentes do tipo EditText, onde podemos 
informar características de estilo da fonte (android:ems), o tipo de dado 
a ser informado pelo usuário (android:inputType) e uma mensagem de 
ajuda (android:hint), que desaparece quando o usuário inicia a digitação.
A fim de facilitar a interação com o usuário, utilizaremos um título 
para cada campo de texto. Os títulos são componentes TextView e 
possuem a propriedade android:text, usada para informar o texto que 
deve ser exibido na tela do android.
O último elemento da nossa tela é um componente Button, que tem 
a propriedade android:text, utilizada para informar o título do botão.
As propriedade android:id (código), android:layout_height (altura) 
e android:layout_width (largura) são comuns a todos os componentes de 
tela. Contudo, android:id é optativa e as demais obrigatórias.
A propriedade android:id define uma chave para acesso a 
componentes. Componentes de projeto iniciam com “@+id/” e os nativos 
iniciam com “@id/” 
As propriedade de altura e largura informam se o componente 
deve ocupar toda a área disponível (match_parent) ou apenas a área 
necessária à exibição do seu conteúdo (wrap-content). 
O número de componentes exibidos é um problema comum em 
devices com telas pequenas. Uma boa estratégia para garantir que todos 
os componentes serão exibidos é adotar o componente ScrollView, que 
cria barras de rolagem quando o conteúdo é maior que a área disponível 
para exibição.
Android 32
No Android, as figuras de uma App ficam armazenadas na pasta /res/
drawable. Para especificar o tipo de imagem, de acordo com a resolução 
da tela do device, utilizamos qualificadores (qualifiers) que indicam ao 
Android a figura que deve ser carregada. As resoluções das telas são 
definidas de acordo com o número de pontos que podem ser exibidos 
por polegada (DPI - Dots Per Inch).
A tabela 5 apresenta a relação entre nomes de pastas, resoluções, 
tamanhos de telas e tamanho de ícones da aplicação.
Em nossa aplicação, precisaremos de uma figura para representar 
o logotipo da nossa aplicação (ic_laucher.png) e outra para ser exibida 
enquanto não for criada uma foto para o contato (ic_no_image.png). 
A figura 20 mostra a estrutura de pastas de imagens do Android 
Studio.
Tabela 5 - Qualifiers e Resoluções de Telas de Devices
Pasta Resolução Área Aproximada (DPI) Tamanho do Ícone (Pixel)
/res/drawable-ldpi Baixa 120 36 x 26
/res/drawable-mdpi Media 160 48 x48
/res/drawable-hdpi Alta 240 96 x 96
 
/res/drawable-xhdpi Alta (Extra) 320 144 x 144
Tabela 20 - Estrutura de Pastas de Figuras
 
33AndroidAndroid 33
A figura 21 apresenta um trecho do código fonte gerado para o 
arquivo res/layout/formulariocontatolayout.xml, necessário à criação da 
tela de Cadastro de Contatos, onde exibimos apenas os componentes 
para Foto, Nome e Botão salvar. Os demais campos, seguem o mesmo 
padrão de TextView e EditText usado no campo Nome.
Figura 21 - Trecho de Código da Tela formulariocontatolayout.xml 
Android 34
4. Implementação das Regras de Negócios
Agora que a tela está pronta para ser utilizada, vamos nos preocupar com 
as regras de negócio da aplicação. A princípio, o usuário deve digitar os 
dados do contato e clicar no botão salvar. Com o clique, deve ser exibida 
uma mensagem com os dados informados e os campos do formulário 
voltam a ficar vazios, esperando nova digitação.
As regras de negócio de uma tela são implementadas a partir de suas 
classes de controle. A classe FormularioContatoActivity.java é responsável 
pelas regras de negócio da nossa tela de cadastro.
A figura 22 mostra a atualização da classe FormularioContatoActivity, 
onde criamos atributos para capturar os valores digitados pelo usuário 
(EditText) e programar a exibição da mensagem e limpeza dos campos 
da tela (Button).
Toda classe filha de Activity possui um método chamado onCreate(), 
que é executado no momento em que a tela é criada. Nesse método, 
associamos componentes de controle a componentes de tela. A associação 
do controlador com a tela ocorre com o método setContentView() e a 
associação de campos da tela a atributos do controlador ocorre com o 
método findViewById().
O Android permite que o ícone da aplicação seja exibido na 
barra de títulos da aplicação. A nossa classe FormularioContatoActivity 
é filha de ActionBarActivity e a exibição do ícone ocorre a partir do 
método getSupportActionBar().setIcon(). Utilizamos a classe R, gerada 
automaticamente pelo Android Studio, para informar a figura que deve 
ser exibida como ícone do sistema, conforme figura 23.
Figura 22 - Atributos da Classe de Controle FormularioContatoActivity
35AndroidAndroid 35
A lógica de negócio dessa fase da nossa aplicação está quase pronta. 
Agora, precisamos exibir uma mensagem com os dados informados pelo 
usuário e limpar os campos da tela, quando o usuário clicar no botão de 
Salvar dados.
O Android trata o clique de um botão como um evento. Podemos 
utilizar o método setOnClickListener() para escrever o trecho de código 
que será executado sempre que o evento de click ocorrer.
A figura 24 mostra que, no final do método onCreate(), incluímos a 
implementação do evento de click do botão.
Figura 23 - Método onCreate() da classe FormularioContatoActivity
Figura 24 - Atualização do Final do Método onCreate()
Android 36
5. Depoly: Rodando a Aplicação no Celular 
O Android Studio permite que você teste sua aplicação em um device 
real, a fim de validar se o layout da aplicação está de acordo com o 
planejado. Para isso, conecte o cabo de dados do seu aparelho celular 
à porta USB do seu computadore selecione a opção Run / Run ‘app’, 
no Android Studio, conforme a figura 25.
Na tela Choose Device, selecione a opção Choose a running 
device, marque o device onde você deseja executar a App e clique 
em Ok, conforme a figura 26. Com isso, a aplicação será instalada no 
device e executada automaticamente.
6. Salvando Dados do Contato no Banco de Dados SQLite 
Agora que criamos uma tela onde o usuário pode informar os dados 
do contato, vamos criar os códigos necessários para salvar o contato 
em um banco de dados. Para armazenamento, utilizaremos o SQLite, 
nativo do Android.
Figura 25 - Executar Aplicação no Celular
Figura 26 - Tela de Seleção de Dispositivo para Executar a App
37Android
Na camada de persistência da nossa App, usaremos o padrão de 
projeto Data Access Object (DAO), onde, para cada tabela do banco 
de dados, criamos uma classes de persistência específica. Assim, como 
temos que armazenar os dados de contatos, vamos criar as classes 
Contato (Figura 27) e ContatoDAO (Figura 28), para representar 
os dados da tabela de contatos e manipular os dados dessa tabela, 
respectivamente.
Figura 27 - Classe Contato.java
Figura 28 - Início da Classe ContatoDAO 
Android 38Android 38
O Android traz a classe SQLiteOpenHelper para ajudar na 
implementação da camada de persistência. Essa classe já oferece os 
principais métodos para atualização de registros do banco de dados. 
Seus métodos onCreate() e onUpgrade() são utilizados para criação e 
atualização das estruturas do banco de dados.
Após a criação da base, precisamos de um método para cadastrar 
novos registros na tabela de contatos, conforme a figura 29.
Agora que nossa camada de modelo está preparada para cadastrar 
contatos, vamos atualizar a camada de controle, para que o click do botão 
chame o método cadastrar() da classe ContatoDAO, conforme exibido na 
figura 30.
Figura 29 - Método para Cadastro de Contatos no Banco de Dados
Figura 30 - Atualização da Camada de Controle
39AndroidAndroid 39
Rode novamente a aplicação e teste a nova funcionalidade de 
cadastro. Se tudo deu certo, devem ser exibidas duas mensagens no 
console, após o clique do botão: “Tabela criada: Contatos” e “Contato 
cadastrado: Nome informado”.
7. Listagem de Contatos 
Agora que conseguimos cadastrar contatos no banco de dados, vamos 
melhorar a funcionalidade da App e criar uma tela de listagem de 
contatos. Para isso, clique com botão direito na raiz do projeto e siga os 
passos da figura 31.
Em seguida, informe os nomes dos arquivos gerados para a nova 
tela, conforme a figura 32, e clique no botão Finish.
Figura 31 - Menu para Criação de Nova Activity em Branco
Figura 32 - Dados da Nova Activity
Android 40Android 40
A nova tela de listagem será a tela inicial da nossa aplicação, 
onde exibiremos a lista de contatos cadastrados e o menu principal da 
aplicação, conforme exibido na figura 33.
Até aqui, o formulário é a tela inicial da App. Precisamos avisar ao 
Android que a tela de listagem é a nova tela inicial. Para isso, vamos 
atualizar o arquivo de configurações do nosso sistema, o AndroidManifest.
xml, que fica na pasta manifests.
O AndroidManifest.xml é o arquivo que armazena as configurações 
que devem ser carregadas pelo Android, quando a nossa aplicação for 
carregada. Nele encontramos a lista de Activities da App. Para que a 
ListagemActivity seja a primeira chamada pelo Android, ela precisa ser 
marcada com as opções MAIN e LAUNCHER, conforme a figura 34.
Figura 33 - Tela Inicial da Aplicação
Figura 34 - Tela Inicial da Aplicação
41Android
Sempre que solicitamos uma nova Activity, o Android Studio cria 
também um menu para a nova tela. Quando criamos a tela de listagem, 
foi criado o arquivo res/menu/listagemmenu.xml, para agrupar os itens do 
nosso menu principal.
O menu da nossa aplicação exibirá ícones para novo cadastro, exibição 
de mapas e atalho para o submenu de opções, conforme figura 35.
Por padrão, o Android exibe apenas duas opções de menu. Caso sejam 
necessárias mais opções, devemos utilizar a estratégia de submenu, onde 
podemos criar uma hierarquia de itens de menu.
Na figura 36, o terceiro item do menu é representado por uma seta 
de “Mais opções”, onde, após o clique do usuário, são exibidas mais três 
opções de menu: Enviar dados, Receber dados e Preferências. 
Figura 35 - Arquivo res/menu/listagemmenu.xml
Figura 36 - Atualização do Menu Principal
Android 42Android 42
Agora que o menu principal está pronto para ser utilizado e a 
tela inicial foi atualizada no AndroidManifest, vamos atualizar a tela de 
listagem e incluir os componentes necessários à exibição de uma lista de 
contatos.
No Android, temos o componente ListView, especialista em 
exibir dados de listas de objetos. Sendo assim, vamos incluir na tela 
listagemlaytou.xml uma ListView, que ficará dentro de um LinearLayout, 
que servirá de container principal da nossa tela, conforme exibido na 
figura 37.
Com a tela de listagem pronta, podemos planejar os próximos 
passos. Precisamos atualizar a camada de modelo, para nos retornar 
uma lista de contatos salvos no banco de dados. Para isso, vamos criar o 
método listar() na classe ContatoDAO, conforme a figura 38.
Figura 37 - Tela de Listagem de Contatos
Figura 38 - Método para Retorno da Lista de Contatos do Banco de Dados
43Android
Agora que temos a tela pronta e a lista de contatos que vem do 
banco de dados, vamos atualizar a classe ListagemActivity, a fim de exibir 
o menu principal da nossa App e os nomes dos contatos na tela. 
O Android utiliza métodos de callback (métodos invocados 
pelo próprio Android) para facilitar a interação com seus aplicativos. 
Dentre esses métodos, temos o método onCreateOptionsMenu(), que 
é disparado pelo Android para criar o menu da aplicação e o método 
onOptionsItemSelected(), disparado sempre que uma opção do menu é 
clicada. 
Quando o usuário da App clicar na opção menu_novo, queremos 
chamar a tela de formulário, para que seja informados os dados do novo 
contato. No Android, essa transição de telar ocorre a partir do uso de 
Intents, onde podemos informar a tela de origem (this) e a tela de destino 
(FormularioContatoActivity.class). Para iniciar a tela de destino, utilizamos 
o método startActivity().
A figura 39 apresenta o código fonte necessário para trabalharmos 
com o menu principal da nossa App.
A exibição de uma listagem de contatos depende de alguns atributos: 
lista de nomes que será exibida (List<String>), componente de controle 
da ListView, um adaptador (ArrayAdapter<String>) para imprimir a lista e 
um layout de exibição (simple_list_item_1).
Figura 39 - Novos Métodos da Classe ListagemActivity
Android 44Android 44
A figura 40 traz o código necessário à exibição da lista de nomes 
de contatos, onde: a) o método carregarLista() faz a chamada à camada 
de modelo e gera a lista de nome; b) o método onResume(), executado 
sempre que a tela vai ser exibida, solicita a atualização da listagem de 
nomes.
Para finalizar o nosso cadastro de contatos, precisamos fazer uma 
atualização no método onCreate() da classe FormulárioContatoActivity. 
Após a edição de todos os dados do novo contato, o usuário deve clicar 
no botão salvar e, ao invés de limpar os dados da tela, nossa aplicação 
deve encerrar a dela de formulário e retornar à tela de listagem. Para 
encerrar uma Activity, podemos clicar no botão Back do aparelho ou 
invocar o método finish(), conforme exibido na figura 41.
Figura 40 - Atributos e Métodos da Classe ListagemActivity.java
45AndroidAndroid 45
8. Câmera e um Pouco do Sistema de Arquivo 
Agora que nossa aplicação tem uma telade cadastros e outra para 
listagem, vamos criar a funcionalidade que permite que o usuário inclua 
fotos de seus contatos. Para isso, seguiremos uma estratégia onde os 
arquivos físicos das fotos ficam armazenados no sistema de arquivos do 
device e armazenamos apenas o caminho para a foto no banco de dados.
A fim de melhorar a organização do nosso código fonte, vamos 
implementar um padrão de projetos conhecido como Helper, onde 
criamos uma classe para ficar responsável pela sincronização de dados de 
um formulário. Para isso, criaremos a classe FormularioHelper, que ficará 
responsável pelo retorno e atualização de dados da tela.
Figura 41 - Atualização do Evento de Clique do Botão Salvar
Android 46
A nova classe FormularioHelper define atributos de nome, telefone, 
email, endereço, site, foto (que antes ficavam na classe Formulario), 
além de um método construtor, que recebe a Activity que controla a 
tela de edição dos dados de Contatos. Em seu método carregarFoto(), 
implementamos a lógica necessária para acessar o sistema de arquivos, 
carregar o arquivo na memória do device e exibir a figura correspondente. 
A figura 42 apresenta os métodos citados.
O método getContato() da classe FormularioHelper é usado para 
criarmos um objeto Contato, a partir dos dados exibidos na tela do device, 
enquanto o método atualizarTela() recebe um objeto Contato e atualiza 
os componentes de tela. A figura 43 apresenta os métodos getContato(), 
atualizarTela() e getFoto().
Figura 42 - Classe de Implementação do Padrão de Projeto View Helper
47AndroidAndroid 47
Em nossa aplicação, permitiremos que o usuário adicione foto 
aos contatos. Para isso, precisamos acessar a câmera do device, salvar 
a imagem capturada em uma pasta do sistema de arquivos e carregar a 
foto em nossa aplicação. 
Quando instalamos um novo aplicativo em nosso smartphone, 
é comum que seja exibida uma lista informando quais componentes 
do device serão acessados pela App. Isso ocorre porque o acesso a 
componentes como câmera e sistema de arquivos é restrito e deve ser 
autorizado pelo usuário. Para pedir a autorização necessária, atualize o 
AndroidManifest.xml, conforme a figura 44.
Figura 43 - Últimos Métodos da Classe FormularioHelper
Android 48
Precisamos atualizar nossa classe FormularioContatoActivity, a fim 
de incluir a interação com o Helper e o tratamento de fotos. Para isso, 
vamos remover os antigos componentes de tela e incluir atributos para 
controle do Helper, câmera e sistema de arquivos, conforme a figura 45.
A troca da foto de um contato acontece a partir do click no ImageView 
do formulário, quando invocamos a Intent MediaStore.ACTION_IMAGE_
CAPTURE, usada para carregar a câmera do aparelho, passando como 
parâmetro o local onde queremos armazenar a foto. A execução dessa 
nova Activity é realizada a partir do método startActivityForResult() e o 
seu resultado é capturado em onActivityResult().
O trabalho no desenvolvimento de aplicativos móveis traz uma 
peculiaridade, não encontrada em aplicações web ou desktop. Quando 
giramos a tela do device, o layout pode ser reconfigurado, para se adequar 
às novas dimensões de apresentação. Contudo, durante esse processo, 
podemos perder alguns dados da tela. Para evitar a perca do caminho 
Figura 44 - Inclusão de Permissões de Acesso no AndroidManifest.xml
Figura 45 - Atualização da Classe FormularioContatoActivity
49Android
da imagem, vamos implementar o método onSaveInstanceState(), para 
salvar o caminho na memória e recuperá-lo no método onCreate(), 
conforme a figura 46.
Avançando nas atualizações do nosso código fonte, vamos 
atualizar o método onCreate() da classe FormularioContatoActivity, onde 
precisamos: (1) remover as linhas com método findViewById(); (2) criar o 
objeto helper responsável pelas regras de tela; e (3) atualizar o click do 
botão salvar, para solicitar serviço do helper, conforme a figura 47.
Figura 46 - Método onSaveInstanceState da classe FormularioContatoActivity
Figura 47 - Atualização do método onCreate() da classe FormularioContatoActivity
Android 50
Para completar a atualização do método onCreate, vamos incluir, 
apos o comentário “//Continua...”, o código para carregar a foto, caso o 
device tenha sido rotacionado e a implementação do click no ImageView, 
que chama a câmera, conforme a figura 48.
Agora que já abrimos a câmera para que o usuário capture a nova 
foto do contato, precisamos recuperar a imagem gerada e atualizar a 
figura exibida no ListView do formulário. Para isso, vamos implementar o 
método onActivityResult, que chama o método carregarFoto() do helper, 
passando o caminho para a imagem.
A figura 49 apresenta o código do método de retorno da câmera. 
Atualize o código fonte e teste a nova funcionalidade em um device.
Figura 48 - Continuação do Método onCreate()
51Android
9. Componentes Customizados
Agora que capturamos a foto, vamos atualizar a tela de listagem para 
exibir a foto e o nome dos contatos, onde cada contato será exibido com 
uma cor diferente. Para chegarmos a esse efeito, vamos começar pela 
criação do arquivo /res/values/colors.xml, conforme a figura 50.
As linhas da nossa listagem devem exibir a foto e o nome do 
contato. Vamos criar o arquivo /res/layout/item.xml para organizar os 
componentes de imagem e texto, conforme a figura 51.
Figura 49 - Método onActivityResult da Classe FormularioContatoActivity
Figura 50 - Arquivo de Definição de Cores
Android 52
Agora, precisamos criar uma classe, filha de BaseAdapter, para 
processar e configurar adequadamente a exibição de cada contato da 
listagem, conforme a figura 52.
Figura 51 - Layout de Cada Contato da Listagem
Figura 52 - Adapter Customizado Para Exibição de Contatos
53Android
Continuando nossa classe ContatoAdapter, precisamos implementar 
o método getView(), responsável pela exibição do Contato, conforme a 
figura 53.
A figura 54 apresenta o resultado da exibição da listagem de 
contatos.
Figura 53 - Método de Configuração de Cada Linha da Listagem
Figura 54 - Resultado dos Componentes Customizados
Android 54
10. Trabalhando com Serviços em Background
O Android nos possui uma série de serviços de segundo plano (background), 
que rodam independentes das nossas aplicações, oferecendo recursos 
como recebimento de notificações e SMS. Para acesso a esses serviços, 
precisamos criar uma classe filha da classe abstrata BroadcastReceiver e 
implementar o método onReceive(). Após a criação da classe, precisamos 
registrar nosso novo receiver no AndroidManifest.xml.
A figura 55 mostra a nossa classe SMSReceiver(à esquerda), a 
atualização do AndroidManifest (à direita) e o resultado das gerado (a 
baixo).
11. Trabalhando com Mapas e GPS
O trabalho com mapas em Android chama a atenção dos desenvolvedores 
pela facilidade de integração com dos aplicativos desenvolvidos, com a 
Google Maps API. Para isso, precisamos criar uma chave, executando os 
seguintes comandos:
• LINUX e MAC: keytool -list -v -keystore ~/.android/debug.keystore 
-alias androiddebugkey -storepass android -keypass android
Figura 55 - Trabalhando com BradcastReceiver
55Android
• Windows 7: keytool -list -v -keystore “C:\Users\usuario\.android\
debug.keystore” -alias androiddebugkey -storepass android -keypass 
android
A figura 56 apresenta o resultado da execução do comando keytool.
Agora, precisamos gerar uma chave de desenvolvimento (API Key) 
no Maps. Para isso, acesse https://console.developers.google.com/
project, crie um novo projeto e habilite a opção: Google Maps Android 
API v2. Para finalizar o registro, crie uma nova chave usando o código 
SHA1 gerado como comando keytool, concatenado com a string “;br.
com.cursoandroid.agenda”, conforme a figura 57, onde foi gerada a API 
Key: AIzaSyCoypm7ATo2UaR2YgLunDYXRTfg1C5P-v8
Figura 56 - Resultado do Comando Keytool no Mac
Figura 57 - API Key Gerada pelo Google Maps
Android 56Android 56
Agora, vamos criar nossa Activity para mapas, conforme a figura 58.
Informe os nomes da Activity = “MapsActivity” e do arquivo de 
layout = “mapslayout” e clique em Finish. Além da Activity e do layout, o 
Android Studio gerar o arquivo /res/values/google_maps_api.xml, onde 
devemos incluir a nossa API KEY gerada pelo Google, conforme a figura 
59.
Abra o AndroidManifest e veja as linhas incluídas pelo Android 
Studio, para controle da tela de mapas. Em seguida, atualize o método 
onOptionsItemSelected() da classe ListagemActivity, para chamar a 
Activity de mapas, conforme a figura 60.
Figura 58 - Criação da Tela de Mapas
Figura 59 - Atualização do Arquivo Google_maps_api.xml
57Android
A configuração padrão do mapa, mostra os continentes, e uma 
marcação onde longitude e latitude são iguais a zero. Vamos atualizar o 
método setUpMap() da classe MapsActivity para marcar o endereço da 
FUCAPI e aumentar o zoom da câmera, conforme figura 61.
Figura 60. Exibir tela de mapas 
Figura 60 - Exibir Tela de Mapas
Figura 61 - Atualização da Classe Maps Activity
Android 58
Embora o uso de coordenadas de latitude e longitude seja simples, 
nem sempre temos esses dados à disposição, sendo mais comum termos 
a informação de endereço que desejamos marcar. 
A figura 62 mostra uma função que recebe uma string com o 
endereço a ser marcado e devolve um objeto LatLng com as respectivas 
coordenadas.
Vamos atualizar o método setUpMap() da classe MapsActivity para 
marcarmos o endereço de um vizinho da FUCAPI, conforme a figura 63.
Figura 62 - Exibir Tela de Mapas
Figura 63 - Marcação de Pontos Utilizando o Endereço
59AndroidAndroid 59
Para finalizar, a Figura 64 apresenta a tela de mapas atualizada com 
a nova marcação.
Figura 64 - Resultado da Marcação por Endereço
Android 60
Palavras do Coordenador
Neste módulo você teve a oportunidade de aprender sobre como começar a 
desenvolver aplicativos de software utilizando a linguagem Java para a plataforma 
Android, uma plataforma de código aberto cujo desenvolvimento de programas é 
amplamente incentivado pelo Google. Como isso, você tem possiblidade de programar 
para uma gama enorme de dispositivos móveis, muito utilizados por usuários do 
mundo inteiro, como por exemplo: PDAs, tablets, smartphones, consoles de jogos, 
players de MP3/MP4 entre outros.
No próximo módulo, veremos quais são os conceitos e tecnologias por traz 
do desenvolvimento de websites, sejam eles desde uma simples página estática até 
aplicativos dinâmicos. 
Vamos precisar que você continue a se dedicar com muita força de vontade no 
estudo destes módulos. Boas Aulas. 
Até logo!
61Android
Referências Bibliográficas
BURTON, Michael. Desenvolvimento de aplicativos Android para 
leigos. Alta books, Rio de Janeiro, 2014
LECHETA, Ricardo. Google Android, 3a edição, Novatec, São Paulo, 2013
___________________. Google Android para tablets, 3a edição, Novatec, 
São Paulo, 2012
Site: d.android.com
Android 62
CRIAÇÃO DE CONTEÚDO
Márcio Palheta Piedade
REVISÃO TÉCNICA
Alessandro Carlos Frota Freire
ORIENTAÇÃO E REVISÃO DIDÁTICA
Débora Claudiano da Silva
PROJETO GRÁFICO E EDITORAÇÃO
Thiago Lemos
ILUSTRAÇÕES
Emanuel Braga Ferreira
COORDENAÇÃO GERAL
Narle SIlva Teixeira
63Android

Outros materiais