Ricardo Queirós
O Android™ é um sistema operativo para dispositivos móveis desenvolvido pela Open Handset Alliance, liderada pela Google. O mercado móvel apresentou em 2012 uma grande hegemonia dos dispositivos Android, com mais de metade da quota de mercado na venda de dispositivos móveis. A Google Play, loja online de aplicações Android, registou mais de 800 mil aplicações e mais de 30 biliões de downloads foram feitos até à data entre aplicações pagas e gratuitas. Estes números impressionam e são o mote para a escrita desta obra dedicada ao Android, que tem como principal objetivo ensinar todos aqueles que se estão a iniciar no desenvolvimento de aplicações para dispositivos Android. Entre outros, são abordados os seguintes temas: • Introdução ao Android; • A minha primeira aplicação Android; • Activities e intents; • Interface gráfica (ViewGroups e Views); • Gestão de dados (ficheiros e SQLite);
• Multimédia (captura de imagem e vídeo); • Envio e receção de chamadas de voz/dados; • Networking; • Mapas e localização; • Sensores.
A linguagem de programação usada é o Java e o ambiente de desenvolvimento onde foram escritos todos os exemplos da obra, compatíveis até à versão 4.x do Android, é o Eclipse. Esta é, também, uma obra fundamental e de leitura obrigatória para profissionais da área da programação móvel, para professores e alunos de disciplinas de computação móvel e que queiram obter um suporte teórico/prático sobre a programação para dispositivos móveis e para todas as pessoas que se interessam pelas novas tecnologias e queiram tirar partido do seu dispositivo móvel.
Desenvolvimento de uma aplicação completa
Esta obra disponibiliza ainda a correspondência dos principais termos técnicos para o Português do Brasil.
www.fca.pt
Código fonte dos exemplos disponível em www.fca.pt, até o livro se esgotar ou ser publicada nova edição atualizada ou com alterações.
ISBN 978-972-722-763-1
Ricardo Queirós
RICARDO QUEIRÓS – (ricardo.queiros@gmail.com) – Doutorado em Ciências de Computadores pela Faculdade de Ciências da Universidade do Porto (FCUP). Exerce a sua atividade como docente na Escola Superior de Estudos Industriais e Gestão (ESEIG), onde é responsável por disciplinas na área das Linguagens e Técnicas de Programação e Bases de Dados. Paralelamente, desenvolve atividade científica na área da interoperabilidade entre sistemas de e-learning. É membro fundador do Knowledge Management, Interactive and Learning Technologies Research Group (KMILT) na ESEIG e membro efetivo do Center for Research in Advanced Computing Systems (CRACS), uma unidade de investigação do Laboratório Associado INESC Porto.
Programação em Java através do Eclipse Código fonte dos exemplos em www.fca.pt
Distribuição
Lidel – edições técnicas, lda
SEDE:
R. D. Estefânia, 183, R/C Dto., 1049-057 LISBOA Internet: 21 354 14 18 – livraria@lidel.pt / Revenda: 21 351 14 43 – revenda@lidel.pt Formação/Marketing: 21 351 14 48 – formacao@lidel.pt / marketing@lidel.pt Ensino Línguas/Exportação: 21 351 14 42 – depinternacional@lidel.pt Fax: 21 352 26 84 LIVRARIA:
Av. Praia da Vitória, 14 – 1000-247 LISBOA Tel.: 21 354 14 18 – e-mail: livraria@lidel.pt
Copyright © abril 2013 FCA – Editora de Informática, Lda. ISBN: 978-972-722-763-1 Capa: Emília Calçada Impressão e acabamento: Tipografia Lousanense, Lda. – Lousã Depósito Legal N.º 357593/13 Livro segundo o Novo Acordo Ortográfico
Os nomes comerciais referenciados neste livro têm patente registada.
Marcas Registadas de FCA – Editora de Informática, Lda. – ®
®
®
Este pictograma merece uma explicação. O seu propósito é alertar o leitor para a ameaça que representa para o futuro da escrita, nomeadamente na área da edição técnica e universitária, o desenvolvimento massivo da fotocópia. O Código do Direito de Autor estabelece que é crime punido por lei, a fotocópia sem autorização dos proprietários do copyright. No entanto, esta prática generalizou-se sobretudo no ensino superior, provocando uma queda substancial na compra de livros técnicos. Assim, num país em que a literatura técnica é tão escassa, os autores não sentem motivação para criar obras inéditas e fazê-las publicar, ficando os leitores impossibilitados de ter bibliografia em português. Lembramos, portanto, que é expressamente proibida a reprodução, no todo ou em parte, da presente obra sem autorização da editora.
ÍNDICE GERAL DEDICATÓRIA...................................................................................................... V AGRADECIMENTOS ...............................................................................................XI 1.INTRODUÇÃO AO ANDROID .................................................................................. 1
1.1 História e evolução .............................................................................................................. 1 1.2 Arquitetura ........................................................................................................................... 4 1.3 Principais características ..................................................................................................... 5 1.4 Ferramentas de desenvolvimento Android ..................................................................... 7 1.4.1 Android SDK .............................................................................................................. 7 1.4.2 Eclipse .......................................................................................................................... 9 1.4.3 Android Development Tools (ADT) ............................................................................. 9 2. A MINHA PRIMEIRA APLICAÇÃO ANDROID............................................................ 13
2.1 Criação de um projeto Android ....................................................................................... 13 2.2 Execução da aplicação ....................................................................................................... 17 2.3 Anatomia de uma aplicação Android ............................................................................. 19 2.3.1 AndroidManifest.xml .............................................................................................. 20 2.3.2 Recursos ..................................................................................................................... 22 2.3.3 R.java .......................................................................................................................... 24 2.3.4 HelloWorldActivity.java ......................................................................................... 25 2.4 Debugging da aplicação...................................................................................................... 25 2.4.1 LogCat........................................................................................................................ 27 2.4.2 DDMS ........................................................................................................................ 29 2.5 Distribuição da aplicação .................................................................................................. 31 3. ACTIVITIES E INTENTS ..................................................................................... 35
3.1 Componentes de uma aplicação Android ...................................................................... 35 3.2 Ciclo de vida de uma atividade ....................................................................................... 36 3.3 Iniciar uma atividade ........................................................................................................ 38 3.3.1 Usando intents........................................................................................................... 38 3.3.2 Intent explícita ........................................................................................................... 39 3.3.3 Intent implícita .......................................................................................................... 40 3.3.4 Obter o resultado de uma atividade ...................................................................... 43 3.4 Aplicação MiniCalc ............................................................................................................ 46 4. DESENHAR A INTERFACE GRÁFICA ...................................................................... 55
4.1 Componentes de uma interface gráfica .......................................................................... 55 © FCA – Editora de Informática
VIII
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
4.2 Layouts ................................................................................................................................. 57 4.2.1 Layouts simples ......................................................................................................... 58 4.2.2 Layouts com conteúdo dinâmico ............................................................................ 60 4.2.3 Gerir diferentes ecrãs ............................................................................................... 66 4.3 Views..................................................................................................................................... 69 4.3.1 Buttons ........................................................................................................................ 69 4.3.2 Text Fields ................................................................................................................... 71 4.3.3 Checkboxes .................................................................................................................. 75 4.3.4 Radio buttons .............................................................................................................. 77 4.3.5 Spinners ...................................................................................................................... 79 4.3.6 Pickers ......................................................................................................................... 81 4.4 Menus .................................................................................................................................. 85 4.4.1 Options Menu ............................................................................................................. 87 4.4.2 Action Bar .................................................................................................................. 88 4.5 Dialogs .................................................................................................................................. 93 4.5.1 AlertDialog ................................................................................................................. 94 4.5.2 ProgressDialog ............................................................................................................ 97 4.6 Notifications ....................................................................................................................... 101 4.6.1 Toast.......................................................................................................................... 102 4.6.2 Status ........................................................................................................................ 102 5. GESTÃO DE DADOS........................................................................................ 107
5.1 Shared Preferences .............................................................................................................. 107 5.2 Sistema de ficheiros ......................................................................................................... 111 5.2.1 Armazenamento interno ....................................................................................... 111 5.2.2 Armazenamento externo ....................................................................................... 115 5.3 Base de dados ................................................................................................................... 117 5.3.1 SQLiteOpenHelper ................................................................................................... 118 5.3.2 SQLiteDatabase ........................................................................................................ 118 5.3.3 Aplicação ToDo List............................................................................................... 121 5.4 Content providers ............................................................................................................... 127 6. MULTIMÉDIA, MESSAGING E NETWORKING ......................................................... 131
6.1 Multimédia ....................................................................................................................... 131 6.1.1 Captura de imagens ............................................................................................... 132 6.1.2 Captura de vídeo .................................................................................................... 136 6.1.3 Texto-para-voz ........................................................................................................ 139 6.2 Messaging ........................................................................................................................... 142 6.2.1 Enviar mensagens SMS ......................................................................................... 142 6.2.2 Receber mensagens SMS ....................................................................................... 146 6.2.3 Enviar mensagens de e-mail ................................................................................. 150 6.3 Networking ......................................................................................................................... 153 © FCA – Editora de Informática
ÍNDICE GERAL
IX
6.3.1 Classe WebView ..................................................................................................... 153 6.3.2 Conexão à rede ....................................................................................................... 154 7. MAPAS, LOCALIZAÇÃO E SENSORES ................................................................... 169
7.1 Maps API ........................................................................................................................... 169 7.2 Location API....................................................................................................................... 176 7.3 Sensores ............................................................................................................................. 181 8. UM EXEMPLO COMPLETO: JOGO DO GALO ........................................................... 187
8.1 Estrutura do jogo.............................................................................................................. 187 8.2 Criação do projeto ............................................................................................................ 188 8.3 Lógica do jogo .................................................................................................................. 189 8.4 Interface gráfica do jogo .................................................................................................. 196 8.5 Menu do jogo .................................................................................................................... 203 8.6 Configurações ................................................................................................................... 205 GLOSSÁRIO DE TERMOS – PORTUGUÊS EUROPEU / PORTUGUÊS DO BRASIL .................... 209 ÍNDICE REMISSIVO ........................................................................................... 211
© FCA – Editora de Informática
X
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
© FCA – Editora de Informática
2
A MINHA PRIMEIRA APLICAÇÃO ANDROID 1
Neste capítulo, o leitor terá acesso a toda a informação necessária para criar uma aplicação para dispositivos Android usando a linguagem Java e o IDE Eclipse. Começa-se por criar uma aplicação simples e por executá-la num AVD. De seguida, tira-se uma “radiografia” a uma aplicação Android, enumerando e explicando todos os ficheiros constituintes de um projeto Android. Finaliza-se o capítulo com os detalhes sobre o empacotamento e distribuição da aplicação num dispositivo real e os passos necessários para a sua distribuição na loja online Google Play.
2.1
CRIAÇÃO DE UM PROJETO ANDROID
Para ilustrar a criação de projetos Android, vamos criar a famosa aplicação HelloWorld4. Para criar um novo projeto: 1)
Inicie o Eclipse e selecione File New Project.
2)
Abra a pasta Android, selecione Android Application Project e clique no botão Next.
3)
Na nova janela (Figura 2.1) preencha os seguintes campos: → Application Name – o nome da aplicação. É o nome que surge na
Play Store caso a aplicação seja distribuída na loja online. É também o nome que surge na lista de aplicações nas definições do dispositivo. Escreva “HelloWorld”; → Project Name – o nome do projeto associado. É usado apenas no
Eclipse, mas deve ser único no workspace. Escreva “PrjHelloWorld”;
4
http://en.wikipedia.org/wiki/Hello_world_program.
© FCA – Editora de Informática
14
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES → Package Name – o namespace para o pacote da aplicação. O mesmo
tem de ser único entre todos os pacotes existentes instalados no sistema Android. Escreva “com.example.helloworld”; → Build SDK – versão da plataforma sobre a qual vamos compilar a
aplicação. É aconselhável selecionar a versão mais atual, de forma a suportar as características mais recentes desenvolvidas para as últimas versões do Android. Mantenha “Android 4.1 (API 16)”; → Minimum Required SDK – versão menor do que a aplicação vai
suportar. Quanto mais baixa for, mais dispositivos poderão executar a aplicação mas menos funcionalidades estarão disponíveis. Altere para “API 8: Android 2.2 (Froyo)”. Com esta seleção o Eclipse indica que a aplicação a criar vai ser suportada por 93% dos dispositivos existentes no mercado móvel. Mantenha todas as outras opções e clique no botão Next.
FIGURA 2.1 – Criação de um novo projeto Android
4)
A próxima janela (Figura 2.2) permite configurar o ícone da aplicação que vai aparecer no dispositivo (ou emulador). O ícone pode ser
© FCA – Editora de Informática
A MINHA PRIMEIRA APLICAÇÃO ANDROID
15
baseado numa imagem carregada a partir do computador ou pode-se aceitar a imagem predefinida. Outras opções, como a cor, a forma e o tamanho podem ser definidas. Mantenha as opções por omissão e clique no botão Next:
FIGURA 2.2 – Configuração do ícone da aplicação Android
5)
De seguida, defina se o projeto cria automaticamente uma atividade ou não. Uma atividade representa um único ecrã da aplicação. Existem dois tipos: BlankActivity que cria uma atividade vazia com navegabilidade opcional e MasterDetailFlow que cria duas atividades: uma de seleção e outra de detalhe (que depende da seleção feita). Selecione a primeira atividade e clique no botão Next.
6)
Na próxima janela (Figura 2.3), configure a atividade do tipo BlankActivity preenchendo os seguintes campos: → Activity Name – nome da classe que representa a atividade princi-
pal a criar. Escreva “HelloWorldActivity”;
© FCA – Editora de Informática
16
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES → Layout Name – nome do layout a criar para a atividade. Mantenha
“activity_hello_world”; → Navigation Type – forma de navegação a usar na atividade. Pode
ser: None, Tabs, Tabs + Swipe, Swipe Views + Title Strip e DropDown. Mantenha a opção sem navegação; → Hierarchical Parent – implementação por omissão para o botão
Up. Deixe este campo em branco; → Title – texto a aparecer na barra de título da aplicação. Escreva
“HelloWorld App”.
FIGURA 2.3 – Configuração da atividade principal da aplicação Android
Algumas dependências poderão ser necessárias para a criação do projeto. De qualquer forma, o sistema dará essa indicação e o leitor deverá instalá-las.
© FCA – Editora de Informática
A MINHA PRIMEIRA APLICAÇÃO ANDROID
7)
17
Após todas estas configurações, clique no botão Finish para criar o projeto. O Eclipse apresenta a seguinte interface gráfica (Figura 2.4):
FIGURA 2.4 – Projeto criado no IDE Eclipse para a aplicação HelloWorld
2.2
EXECUÇÃO DA APLICAÇÃO
A aplicação pode ser executada num dispositivo físico ou num emulador. Neste livro todas as aplicações vão ser executadas no emulador. Para executar a aplicação no emulador usando o Eclipse, selecione no menu principal a opção Run Run (Ctrl + F11). Surge uma janela com as várias opções de execução. Selecione Android Application e clique no botão OK. O Eclipse instala a aplicação no AVD e, caso este já tenha iniciado, arranca automaticamente a aplicação (Figura 2.5). A aplicação inclui na parte superior o ícone e título previamente definidos. O tipo de atividade selecionada inclui por omissão o texto “Hello world!”.
© FCA – Editora de Informática
18
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
FIGURA 2.5 – Aplicação HelloWorld executada no AVD
Clique no botão do painel direito de forma a fechar a aplicação. De seguida, aceda à lista de aplicações e inicie novamente a aplicação (Figura 2.6):
FIGURA 2.6 – Lista de aplicações no emulador © FCA – Editora de Informática
A MINHA PRIMEIRA APLICAÇÃO ANDROID
19
Na próxima secção vamos perceber a anatomia de um projeto Android e como criar uma simples interface gráfica com o utilizador.
2.3
ANATOMIA DE UMA APLICAÇÃO ANDROID
Após a criação da primeira aplicação para dispositivos Android, é tempo de perceber como é que o projeto que lhe deu origem é constituído. Um projeto Android é composto por um conjunto de pastas e ficheiros que podem ser vistos no Project Explorer do Eclipse, conforme mostra a Figura 2.7:
FIGURA 2.7 – Anatomia de um projeto Android no Project Explorer do Eclipse
De seguida, destacam-se os principais ficheiros do projeto Android no contexto da aplicação HelloWorld. © FCA – Editora de Informática
20
2.3.1
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
ANDROIDMANIFEST.XML
O ficheiro AndroidManifest.xml é um ficheiro no formato XML, criado automaticamente na pasta raiz, e que contém informação essencial para a execução da aplicação: descreve os componentes da aplicação, define os nomes para as atividades, enumera os modos de orientação do ecrã (vertical, horizontal ou ambos), declara permissões para acesso a recursos como o Global Positioning System (GPS) ou a Internet, por exemplo, lista as bibliotecas que a aplicação vai usar e qual a atividade que iniciará primeiro quando a aplicação for aberta, etc. O próximo excerto de código representa o ficheiro manifesto gerado da aplicação HelloWorld: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".HelloWorldActivity" android:label="@string/title_activity_hello_world" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
O elemento raiz <manifest> inclui três atributos:
– define o pacote base para os objetos Java referidos no manifesto;
android:versionCode
package
– define a versão privada da aplicação. A Google Play determina, com base neste valor, se deve realizar uma atualização
© FCA – Editora de Informática
8
UM EXEMPLO COMPLETO: JOGO DO GALO 1
Neste último capítulo, apresenta-se um exemplo completo do código para a implementação de um conhecido jogo de tabuleiro chamado Jogo do Galo para dispositivos Android. A aplicação permite o jogo entre dois jogadores (humano contra computador) com três níveis de dificuldade. A pontuação e as configurações do jogo são persistidas em ficheiro.
8.1
ESTRUTURA DO JOGO
O Jogo do Galo é um jogo popular, composto por um conjunto de regras extremamente simples, a saber:
O tabuleiro de jogo é uma matriz de três linhas por três colunas;
Dois jogadores jogam alternadamente (geralmente um ‘X’ e um círculo ‘O’), numa posição que esteja vazia;
O objetivo é conseguir três ‘X’ ou ‘O’ em linha (horizontal, vertical ou diagonal) e, ao mesmo tempo, quando possível, impedir o adversário de ganhar na próxima jogada.
A representação gráfica do tabuleiro de jogo é bastante simples. Todas as questões relacionadas com o design da aplicação foram colocadas em segundo plano, dando prioridade à usabilidade e funcionalidade do próprio jogo. O tabuleiro de jogo é representado visualmente através de nove botões. Na parte superior do tabuleiro, surge um rótulo a indicar a pontuação de cada jogador. Na parte inferior do tabuleiro, é exibido um novo rótulo indicando o estado do jogo. Para jogar, os dois jogadores clicam alternadamente nos botões. No topo do ecrã, surge um menu com quatro opções: novo jogo, configurações, restabelecer a pontuação inicial e sair da aplicação. A Figura 8.1 mostra os ecrãs principais do Jogo do Galo: © FCA – Editora de Informática
188
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
FIGURA 8.1 – Interface gráfica do Jogo do Galo
8.2
CRIAÇÃO DO PROJETO Para a criação de um novo projeto, execute a seguinte sequência de passos: 1)
Crie um novo projeto intitulado PrjGalo.
2)
Nomeie: → Aplicação – Galo; → Pacote – com.exemplo.galo; → Atividade – Entrada.
3)
Adicione um novo ícone (Galo de Barcelos) para servir como ícone da aplicação.
Após a criação do projeto, adicione dois objetos: uma ImageView e uma A primeira inclui o logótipo do jogo em formato expandido e a segunda apresenta o nome do jogo em maiúsculas. Ambos os objetos aparecem centrados em relação ao ecrã e dispostos num layout do tipo LinearLayout. TextView.
© FCA – Editora de Informática
UM EXEMPLO COMPLETO: JOGO DO GALO
189
Esta primeira atividade serve apenas para apresentar o jogo de forma simples e redirecionar (após 2 segundos) os jogadores para o tabuleiro de jogo, que será gerido numa segunda atividade chamada JogoGalo. Após a criação da atividade JogoGalo, volte à atividade Entrada e insira o seguinte código: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entrada); Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { startActivity(new Intent(getApplicationContext(), JogoGalo.class)); Entrada.this.finish(); } }, 2000); }
Optou-se por separar a parte gráfica da lógica da aplicação. Assim, a lógica da UI é incluída na atividade JogoGalo e a lógica do jogo na classe Tabuleiro. Esta separação torna o código mais fácil de ler, manter e atualizar.
8.3
LÓGICA DO JOGO
A lógica do jogo é escrita numa classe independente chamada Tabuleiro. Nesta classe, define-se um conjunto de variáveis para a representação interna do tabuleiro como um vetor de carateres, as peças de ambos os jogadores (carateres), os seus nomes e pontuações e um conjunto de métodos para manipular o vetor de carateres. Segue a lista das variáveis da classe e das assinaturas dos métodos: public class Tabuleiro { // PROPRIEDADES private char tabuleiro[] = {' ',' ',' ',' ',' ',' ',' ',' ',' '}; public static final char HUMANO = 'X'; public static final char COMPUTADOR = 'O'; public static final char CELULA_VAZIA = ' '; public static final int TAMANHO = 9; public String nomeJogador; public int pontosJogador1 = 0, pontosJogador2 = 0; public int nivel; © FCA – Editora de Informática
190
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES // MÉTODOS public Tabuleiro() public void inicializar() public boolean jogada(char jogador, int posicao) public int verificaVitoria() public int obtemJogadaComputador() public void setNomeJogador(String nomeJogador) public String getNomeJogador() public void setPontosJogador1(int pontosJogador1) public int getPontosJogador1() public void setPontosJogador2(int pontosJogador2) public int getPontosJogador2() public void setNivel(int nivel) public int getNivel()
}
De entre os principais métodos destacam-se a verificação de vitória e a geração automática das jogadas do computador. Para a codificação deste último, partiu-se da existência de três níveis de dificuldade:
Iniciante – é feita uma jogada aleatória para uma posição livre do tabuleiro;
Intermédio – verifica se pode ganhar, nesse caso, faz jogada vitoriosa. Caso contrário, joga aleatoriamente para uma posição livre do tabuleiro;
Avançado – verifica se pode ganhar, nesse caso, faz jogada vitoriosa. Caso contrário, verifica se o adversário pode ganhar, nesse caso, bloqueia a vitória do adversário. Caso contrário, joga aleatoriamente para uma posição livre do tabuleiro.
A Figura 8.2 ilustra graficamente o algoritmo usado para cada um dos níveis de dificuldade:
© FCA – Editora de Informática
UM EXEMPLO COMPLETO: JOGO DO GALO
191
FIGURA 8.2 – Inteligência Artificial (IA) do Jogo do Galo
O próximo código lista a classe Tabuleiro: public class Tabuleiro { // Carateres representando as peças dos jogadores (humano e computador) public static final char HUMANO = 'X'; public static final char COMPUTADOR = 'O'; public static final char CELULA_VAZIA = ' '; public static final int TAMANHO = 9; // Tabuleiro private char tabuleiro[] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
© FCA – Editora de Informática
192
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
// Nome do jogador (humano), pontuações e nível de dificuldade (computador) public String nomeJogador; public int pontosJogador1 = 0, pontosJogador2 = 0, nivel; private Random rand; // Construtor da classe Tabuleiro - Inicializa o tabuleiro public Tabuleiro() { inicializar(); } // Limpa o tabuleiro public void inicializar() { rand = new Random(); for(int i=0; i<TAMANHO;i++) { tabuleiro[i] = CELULA_VAZIA; } } /** * Faz uma jogada * @param jogador - jogador que faz a jogada * @param posicao - posição no tabuleiro onde é feita a jogada * @return devolve verdadeiro caso a jogada seja feita numa posição * livre, caso contrário devolve falso */ public boolean jogada(char jogador, int posicao) { boolean livre = true; if(tabuleiro[posicao]!=CELULA_VAZIA) livre = false; else tabuleiro[posicao] = jogador; return livre; } /** * Verifica vitória * @return * -1 - ninguém ganhou © FCA – Editora de Informática
UM EXEMPLO COMPLETO: JOGO DO GALO *
0 - empate
*
1 - vitória do jogador (humano)
*
2 - vitória do jogador (computador) */
193
public int verificaVitoria() { // Verifica vitória por linha horizontal for (int i = 0; i <= 6; i += 3) { if (tabuleiro[i] == HUMANO && tabuleiro[i+1] == HUMANO && tabuleiro[i+2]== HUMANO) return 1; if (tabuleiro[i] == COMPUTADOR && tabuleiro[i+1] == COMPUTADOR && tabuleiro[i+2]== COMPUTADOR) return 2; } // Verifica vitória por linha vertical for (int i = 0; i <= 2; i++) { if (tabuleiro[i] == HUMANO && tabuleiro[i+3] == HUMANO && tabuleiro[i+6]== HUMANO) return 1; if (tabuleiro[i] == COMPUTADOR && tabuleiro[i+3] == COMPUTADOR && tabuleiro[i+6]== COMPUTADOR) return 2; } // Verifica vitória por linhas diagonais if ((tabuleiro[0] == HUMANO && tabuleiro[4] == HUMANO && tabuleiro[8] == HUMANO) || (tabuleiro[2] == HUMANO && tabuleiro[4] == HUMANO && tabuleiro[6] == HUMANO)) return 1; if ((tabuleiro[0] == COMPUTADOR && tabuleiro[4] == COMPUTADOR && tabuleiro[8] == COMPUTADOR) || (tabuleiro[2] == COMPUTADOR && tabuleiro[4] == COMPUTADOR && tabuleiro[6] == COMPUTADOR)) return 2; // Verifica empate for (int i = 0; i < TAMANHO; i++) { if (tabuleiro[i] != HUMANO && tabuleiro[i] != COMPUTADOR) return -1; } // Caso contrário é um empate return 0; }
© FCA – Editora de Informática
194
ANDROID – INTRODUÇÃO AO DESENVOLVIMENTO DE APLICAÇÕES
/** * Obtém posição para uma jogada do computador tendo em conta * o nível de dificuldade * @return devolve a posição onde o computador pretende jogar */ public int obtemJogadaComputador() { int jogada; // Se nível 2 ou 3 tenta ganhar if(nivel>=2) { for (int i = 0; i < TAMANHO; i++) { if (tabuleiro[i] != HUMANO && tabuleiro[i] != COMPUTADOR) { char curr = tabuleiro[i]; tabuleiro[i] = COMPUTADOR; if (verificaVitoria() == 2) { tabuleiro[i] = curr; return i; } else tabuleiro[i] = curr; } } } // Se nível 3 e não puder ganhar tenta bloquear if(nivel==3) { for (int i = 0; i < TAMANHO; i++) { if (tabuleiro[i] != HUMANO && tabuleiro[i] != COMPUTADOR) { // Guarda o número atual char curr = tabuleiro[i]; tabuleiro[i] = HUMANO; if (verificaVitoria() == 1) { tabuleiro[i] = curr; return i; } else tabuleiro[i] = curr; } © FCA – Editora de Informática
UM EXEMPLO COMPLETO: JOGO DO GALO
195
} } // Qualquer nível do { jogada = rand.nextInt(TAMANHO); } while (tabuleiro[jogada] == HUMANO || tabuleiro[jogada] == COMPUTADOR); return jogada; } public String getNomeJogador() { return nomeJogador; } public void setNomeJogador(String nomeJogador) { this.nomeJogador = nomeJogador; } public int getPontosJogador1() { return pontosJogador1; } public void setPontosJogador1(int pontosJogador1) { this.pontosJogador1 = pontosJogador1; } public int getPontosJogador2() { return pontosJogador2; } public void setPontosJogador2(int pontosJogador2) { this.pontosJogador2 = pontosJogador2; } public int getNivel() { return nivel; } public void setNivel(int nivel) { this.nivel = nivel; } }
© FCA – Editora de Informática
Ricardo Queirós
O Android™ é um sistema operativo para dispositivos móveis desenvolvido pela Open Handset Alliance, liderada pela Google. O mercado móvel apresentou em 2012 uma grande hegemonia dos dispositivos Android, com mais de metade da quota de mercado na venda de dispositivos móveis. A Google Play, loja online de aplicações Android, registou mais de 800 mil aplicações e mais de 30 biliões de downloads foram feitos até à data entre aplicações pagas e gratuitas. Estes números impressionam e são o mote para a escrita desta obra dedicada ao Android, que tem como principal objetivo ensinar todos aqueles que se estão a iniciar no desenvolvimento de aplicações para dispositivos Android. Entre outros, são abordados os seguintes temas: • Introdução ao Android; • A minha primeira aplicação Android; • Activities e intents; • Interface gráfica (ViewGroups e Views); • Gestão de dados (ficheiros e SQLite);
• Multimédia (captura de imagem e vídeo); • Envio e receção de chamadas de voz/dados; • Networking; • Mapas e localização; • Sensores.
A linguagem de programação usada é o Java e o ambiente de desenvolvimento onde foram escritos todos os exemplos da obra, compatíveis até à versão 4.x do Android, é o Eclipse. Esta é, também, uma obra fundamental e de leitura obrigatória para profissionais da área da programação móvel, para professores e alunos de disciplinas de computação móvel e que queiram obter um suporte teórico/prático sobre a programação para dispositivos móveis e para todas as pessoas que se interessam pelas novas tecnologias e queiram tirar partido do seu dispositivo móvel.
Desenvolvimento de uma aplicação completa
Esta obra disponibiliza ainda a correspondência dos principais termos técnicos para o Português do Brasil.
www.fca.pt
Código fonte dos exemplos disponível em www.fca.pt, até o livro se esgotar ou ser publicada nova edição atualizada ou com alterações.
ISBN 978-972-722-763-1
Ricardo Queirós
RICARDO QUEIRÓS – (ricardo.queiros@gmail.com) – Doutorado em Ciências de Computadores pela Faculdade de Ciências da Universidade do Porto (FCUP). Exerce a sua atividade como docente na Escola Superior de Estudos Industriais e Gestão (ESEIG), onde é responsável por disciplinas na área das Linguagens e Técnicas de Programação e Bases de Dados. Paralelamente, desenvolve atividade científica na área da interoperabilidade entre sistemas de e-learning. É membro fundador do Knowledge Management, Interactive and Learning Technologies Research Group (KMILT) na ESEIG e membro efetivo do Center for Research in Advanced Computing Systems (CRACS), uma unidade de investigação do Laboratório Associado INESC Porto.
Programação em Java através do Eclipse Código fonte dos exemplos em www.fca.pt