Desenvolvimento de aplicações na plataforma Google Android Rafael M. Lins Manoel Taenan Prof. Dr. Fábio Gomes Design by Rafael M. Lins Autores • Rafael Madureira Lins de Araújo – Bla bla bla • Manoel Taenan – Bla bla bla • Prof. Dr. Fábio Gomes – Bla bla bla Introdução • Google Android OS, também chamado apenas de Android, é um sistema operacional de código aberto para dispositivos móveis baseado em uma versão modificada do Linux • Provê uma infraestrutura robusta de execução de aplicações Java com uma VM especial chamada Dalvik. • Atualmente é a plataforma que mais cresce no mundo Mais informações: http://www.dalvikvm.com/ 1/2 Introdução • Atualmente, a plataforma Google Android é mantida pela OHA (Open Handset Alliance), um grupo formado por mais de 40 empresas que se uniram para inovar e acelerar o desenvolvimento de aplicações e serviços para dispositivos móveis • Android SDK é o kit de desenvolvimento que disponibiliza as ferramentas e APIs necessárias para desenvolver aplicações para a plataforma Google Android, utilizando a linguagem Java 2/2 Arquitetura 1/2 Arquitetura • Linux Kernel – Sistemas e subsistemas de baixo nível, drivers, acesso direto ao hardware, etc. • Ambiente de Execução e Bibliotecas – Dalvik VM, Serviços de Alto Nível • Arcabouço de Aplicações – Interface do Android para tudo descrito anteriormente • Aplicações – São implementadas utilizando os Arcabouços 2/2 Ambiente de Desenvolvimento • Eclipse IDE – IDE mais utilizada entre os desenvolvedores Java • Eclipse Android Development Toolkit (ADT) – Parte do Eclipse Google Plugin – Prover editores gráficos, utilitários para auxiliar na instalação de componentes, deployment, etc. • Update Site: https://dl-ssl.google.com/android/eclipse/ • JDK – Versão 1.5 (Java 5)ou superior 1/2 Ambiente de Desenvolvimento • Android SDK – Gerencia componentes de desenvolvimento – Gerencia máquinas virtuais para testes – Gerencia montagem dos pacotes APK – Instalado automaticamente pelo Eclipse Google Plugin, ou pode ser baixado em http://developer.android.com/sdk – Recomenda-se instalar os SDK da versão mais atual do Android e a versão 2.1 e/ou 2.2 e/ou 2.3.3 2/2 Componentes de Aplicações • Três componentes-chave: – Activity: Componentes que interagem com o usuário – Service: Componentes que rodam em segundo plano – Intent: Interliga Activities e/ou Services Conceitos Básicos • Activity – Representa uma tela da aplicação • Serve de container para elementos visuais – android.view.View: Classe base para os elementos visuais como Botões, Listas, etc. 1/4 Conceitos Básicos – Estrutura do Projeto /src Código-fonte Java da sua aplicação Android <versão> Bibliotecas de API e SDK do Android R.java Classe autogerada que contém constantes de Resources da aplicação /res Resources da aplicação (imagens, textos, etc.) /drawable-<ldpi, mdpi, hdpi> Imagens que você pretende utilizar /layout Arquivos XML de layout das suas Activities /values Arquivos XML com valores estáticos do sistema AndroidManifest.xml Arquivo de Manifesto da aplicação (armazena informações de permissões, activities, services e outros) <pacote> <pacote> 2/4 Conceitos Básicos • R.java – Classe autogerada pelo ADT – Mantém uma lista de constantes que são utilizadas pela aplicação • IDs de objetos de tela, IDs das imagens do projeto, IDs das contantes de String (i18n) – Não pode ser alterada manualmente – Por causa dela, utilize apenas nomes que_sigam_este_formato (minúsculas separadas por underline) 3/4 Conceitos Básicos • AndroidManifest.xml – Armazena metainformações sobre a aplicação – Todas as Activities tem que ser inclusas nele – Todos os Services tem que ser inclusos nele – Todas as permissões devem ser inclusas nele 4/4 Interface com o Usuário • Existem vários elementos de tela préprontos e formas de se implementar seus próprios elementos de tela • android.view.View e android.view.ViewGroup são as classes base dos widgets (elementos de tela) – Os padrão normalmente se chamam AlgumaCoisaView – TextView, EditView, ListView, MapView, ... 1/6 Interface com o Usuário • Para facilitar a organização, recomenda-se que todo elemento esteja dentro de um Layout – Normalmente LinearLayout ou TableLayout LinearLayout configurado como layout Horizontal: 1 Elemento por linha 2/6 Interface com o Usuário Telas podem ser montadas programaticamente ou via XML XML pode ser montado pelo criador visual de telas. Cada XML representa uma tela e seus componentes. Nesta tela, temos um layout linear e dentro 5 elementos, nesta ordem: - TextView - EditText - TextView - EditText - Button Arquivo login.xml 3/6 UI – Activity: Ciclo de Vida onCreate(), onStart(), onRestart() A Activity veio para primeiro plano (origem determina qual método) onResume() A Activity retornou ao primeiro plano após uma chamada a onStop() onPause(), onStop() A Activity saiu de primeiro plano em virtude de uma ação do usuário ou intervenção do S.O. (uma chamada, por exemplo) onDestroy() A Activity será finalizada. 4/6 Interface com o Usuário • Por padrão a primeira tela mostrada é a main.xml – Segunda linha de código do método onCreate() padrão • Você sempre deve exibir uma tela quando iniciar uma Activity setContentPane() – Caso não queira uma tela, você está criando um Service 5/6 Interface com o Usuário Interações com o usuário são realizadas diretamente com os elementos de tela No exemplo ao lado, pegamos uma das caixas de texto utilizando o método findViewById() passando como parâmetro a constante do ID da caixa de texto (configurada no editor de tela e gravada na classe R) Vale lembrar que sempre se deve fazer o cast para o tipo correto de elemento De posse do elemento, chamamos os métodos dele e executamos nossa lógica. Dica: Os IDs ficam todos na classe R e são únicos dentro do sistema. Por isso, faça um padrão de nomenclatura para não se perder. Neste exemplo usamos layout_tipoNome onde layout = o nome do layout (login.xml), tipo = EditView (edt) e nome = “Login”: login_edtLogin 6/6 UI - Eventos Como quase toda UI a do Android funciona baseada em Eventos Eventos nada mais são que métodos chamados pelo S.O. quando determinada interação é feita pelo usuário. Esta é a parte chata do desenvolvimento de Interfaces com o Usuário, e a “complicada” também. Na verdade, só não é algo comum do desenvolvimento em Java criar classes anônimas que implementam apenas um método. Eventos sempre começam com “on” onClickListener onLongClickListener E têm uma classe correspondente: android.view.View.OnClickListener android.view.View.OnLongClickListener AndroidManifest.xml Todas as Activities e Services devem estar presentes no arquivo AndroidManifest.xml Esta tarefa é feita automaticamente pelo ADT quando você usa o wizard de criação de Activity. No caso de Services eles tem que ser inclusos manualmente. Para incluir você mesmo utilize a interface gráfica de edição do AndroidMainfest.xml ou inclua o XML respectivo Se algum dia você fizer uma Activity ou Service que não está sequer abrindo, verifique se ele está incluído no AndroidManifest.xml Intents • Toda a troca de informações entre Activities e Services é feita através de um objeto chamado Intent – Ele representa a sua intenção de executar uma ação. Essa ação pode ser apenas passar um parâmetro até pedir para o usuário escolher um número de telefone na agenda, um envio de SMS e até download • Fora passagem de parâmetros praticamente toda Intent requer uma Permissão Intents Usar Intents para passagem de parâmetros é bastante simples. Crie uma instância de Intent passando como parâmetro ao construtor quem tem a intenção e para quem será enviada a Intent: this (você) e SegundaTela (quem vai receber esta Intent) Depois disso basta chamar startActivity() e enviar sua Intent como parâmetro. A Activity especificada será iniciada e receberá a Intent e seus parâmetros. Para adicionar parâmetros, basta chamar putExtra(): intent.putExtra(“exemplo”, “XPTO”); Para ler, use getExtra(): intent.getExtra(“exemplo”); Intents • O Android traz uma vasta gama de Intents nativas • Intent Nativa são Intents que “alguém vai atender” como por exemplo abrir um endereço da Web – Quem vai abrir? O Browser Nativo, Google Chrome, Dolphin HD, Opera, Opera Mini? Não importa, o que importa é atender. Intents • A maioria das Intents nativas requerem permissões – INTERNET: Permissão para qualquer coisa relacionada a Internet. Desde abrir Sockets (baixo nível) a simplesmente abrir um website – CONTACT_LIST: Acessar a lista de contatos, pedir para o usuário selecionar um contato de sua lista de contatos Permissões • Permissões devem ser expressas no AndroidManifest.xml e quando alguém instalar seu aplicativo, a Google Play Store irá pedir permissão do usuário para que seu aplicativo tenha acesso ao que você precisa – Infelizmente algo chato porém necessário – Infelizmente, também, algumas permissões não são claras nem para o desenvolvedor nem para o usuário Intents e Permissões Permissões Esta é a lista incompleta de permissões requisitadas pelo aplicativo do facebook. Ao instalar, você dá ao aplicativo permissão para tudo isso. Permissões Para gerenciar permissões, abra o arquivo AndroidManifest.xml Vá até a aba Permissions (Permissões) Existem vários tipos de permissões no Android. As que vamos precisar são Uses Permissions (Permissão de Uso) que são representadas pelo ícone U verde. Clique no Ícone U ou, se preferir, em Add... e escolha Uses Permission Depois basta escolher a permissão que você precisa na lista. Na imagem, escolhemos a permissão para acesso a Internet Notificações São pequenas mensagens que são mostradas discretamente ao usuário e ficam armazenadas na área de notificações do sistema. O exemplo mais expressivo de notificação é a notificação mostrada quando chega um SMS no celular. O Android mostra 1 ou 2 linhas do texto da mensagem na barra superior e depois um ícone de uma carta, indicando que há uma notificação de nova SMS. Ao se clicar numa notificação a mesma dispara uma Activity e a notificação deve remover-se da área de notificação. O texto, título e ação da mesma pode ser atualizado a qualquer momento A Activity é que é responsável por retirar a notificação da área de notificação