Desenvolvimento de um aplicativo básico usando o Google Android (Intent e Intent Filter) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI – Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão Programação de Dispositivos Móveis – 7º Período Objetivos • Nesta aula iremos apresentar uma classe que representa o coração do Android: Intent. Uma Intent representa uma mensagem da aplicação para o Sistema Operacional, solicitando que algo seja realizado. Vamos entender como utilizá-la. Nosso objetivo principal é aproximar o aluno do desenvolvimento de um aplicativo básico. Programação de Dispositivos Móveis – 7º Período Plano de Aula • Intent O que é? Navegação entre telas; Passagem de parâmetros para a próxima Tela; Captura dos conteúdos dos parâmetros enviados; Intents Nativas do Android Implementação Intent Filter O que é? Configuração Ação e Categoria: como identificar uma Intent Implementação Por que criar uma ação e categoria para uma Intent? Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter O que é uma Intent • A Intent representa uma “ação” que a aplicação deseja executar. A tradução de intent é “intenção”, de forma que podemos dizer que uma intent representa a intenção da aplicação de realizar determinada tarefa; • Na prática essa intenção é enviada ao sistema operacional como uma mensagem, chamada de broadcast. Ao receber a mensagem, o sistema operacional tomará as decisões necessárias, dependendo do conteúdo da mensagem, isto é, de sua intenção; • Uma Intent pode ser utilizada para: • • • • • Enviar uma mensagem para o Sistema Operacional; Abrir uma nova tela da aplicação; Ligar para outro celular; Abrir o navegador; E muitas outras ações. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Navegação entre Telas • Relembrando: Para cada tela de nossa aplicação, deveremos criar uma nova classe do tipo Activity; • Com auxílio da classe Intent iremos chamar uma nova Activity; • A classe Intent possui duas formas para desempenhar esta ação: • startActivity(objeto Intent) • startActivityForResult(objeto Intent, codigo) • Para usarmos estes métodos é necessário ter um objeto Intent: Intent it = new Intent(this,NovaActivity.class); startActivity(it); • Neste trecho de NovaActivity.class; código iremos “startar” a Activity • O método startActivityForResult faz uso do parâmetro código para identificar a Activity que será chamada. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Passagem de parâmetros para a próxima Tela • Após entendermos como chamar uma nova Activity, vamos entender como passar parâmetros de uma Tela para outra; • Para isso existe a classe android.os.Bundle; • Esta classe é semelhante a um HashTable, com a possibilidade de informar valores no padrão chave,valor; • Para passarmos dados para outra tela é importante termos um objeto Bundle: Intent it = new Intent(this,NovaActivity.class); Bundle params = new Bundle(); params.putString(“msg”,”Olá Pessoal”); it.putExtras(params); startActivity(it); • No método putString temos a chave “msg” e o valor “Olá Pessoal”. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Captura dos conteúdos dos parâmetros enviados • Após entendermos como enviar dados para a nova Activity, vamos entender como capturar as informações passadas a ela; • Para recuperar as informações precisamos de um objeto Intent e de um objeto Bundle: • • • • • Intent it = getIntent(); Bundle params = it.getExtras(); String valor = params.getString(“msg”); Este código deve ser escrito na Activity NovaActivity.class; Recuperamos o objeto Intent associado a esta Activity; Obtemos um objeto Bundle, params, através do método getExtras(); Usando o método getString() de params, recuperamos o valor repassado; Para tal, usamos a chave “msg”, recuperando o valor “Olá Pessoal”. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Intents nativas do Android • Para chamar uma Activity usamos startActivity(), passando como parâmetro a classe que representa a Activity a ser chamada; • No entanto temos uma outra forma de chamar uma Activity, passando uma String como parâmetro para startActivity(); • Esta String representa uma ação, e faz o mapeamento para chamar uma determinada Activity; • Para chamar por exemplo o Navegador, usamos uma constante Intent.ACTION_VIEW; • Como já sabemos, esta mensagem é enviada ao Sistema Operacional, que mapeia o seu conteúdo para algo do tipo “entendi a mensagem, preciso abrir o navegador”; • Vamos olhar como seria através de um trecho de código. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Intents nativas do Android • Vamos analisar o código que chama uma nova Activity que representa o Navegador: Uri url = Uri.parse(“http://www.google.com”); Intent it = new Intent(Intent.ACTION_VIEW,url); startActivity(it); • Temos um objeto baseado na Classe URI (url) que representa o recurso que queremos, neste caso o Site do Goolge; • A ação Intent.ACTION_VIEW, indica que queremos que o Navegador seja acionado (uma Activity nativa do Android). Neste caso o navegador será aberto no endereço repassado a variável url; Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Intents nativas do Android • Vamos analisar o código que chama uma nova Activity que é responsável por fazer ligações: Uri url = Uri.parse(“tel:99887766”); Intent it = new Intent(Intent.ACTION_CALL,url); startActivity(it); • Temos um objeto baseado na Classe URI (url) que representa o recurso que queremos, neste caso um número de telefone; • A ação Intent.ACTION_CALL, indica que queremos que a Activity responsável por fazer ligações seja acionada (uma Activity nativa do Android). Neste caso a Activity irá ligar para o número do telefone repassado a variável url; Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Implementação • Ações a serem trabalhadas • • • • • Entender o arquivo AndroidManifest.xml; Criar uma nova Activity; Chamar uma Activity a partir de outra; Passar dados de uma Activity para outra; Usar Intents nativas do Android; Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Implementação • Tratamento de Eventos Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter O que é uma Intent Filter • Na seção anterior aprendemos que podemos criar uma “ação” para acionar uma Activity; • Mas como podemos saber qual Activity irá responder a esta “ação”? • Com este objetivo temos a classe android.content.IntentFilter; • Uma IntentFilter pode ser usado para abrir uma Activity a partir de uma ação; • Entender a arquitetura entre uma Intent, IntentFilter e Activity é fundamental; • Por exemplo, quando o Sistema Operacional recebe uma mensagem SMS, ele dispara uma Intent com a ação android.provider.Telephony.SMS_RECEIVED, que pode ser configurada por qualquer aplicação que deseja interceptar essa Intent, por exemplo para ler esta mensagem; Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Configuração do <intent-filter> • • • • Este é um trecho do arquivo AndroidManifest.xml; Perceba a tag <activity> e <intent-filter> interno a ela; Observe que a tag <intent-filter> tem as tags action e category; Estas duas tags definem a ação (android.intent.MAIN) e a categoria (android.intent.category.LAUNCHER), padrões Android; • A ação MAIN é semelhante ao static void main(String args[]) do Java. Marca esta Activity como inicial, sem depender de outra Activity para iniciar. Por isso ela pode ser iniciada diretamente pelo Eclipse; • A categoria LAUNCHER define que a aplicação será top-level e pode ser executada pelo usuário na tela inicial. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Ação e Categoria: como identificar uma Intent • Ação: define o que a intent deseja realizar. Existem algumas ações-padrão do Android, como Intent.VIEW_ACTION, CALL_ACTION. Entretanto o desenvolvedor pode criar suas próprias ações para serem interpretadas pelo sistema operacional; • Categoria: a categoria é utilizada em conjunto com a ação para descobrir o que a intent deseja realizar. Se a categoria for LAUNCHER_CATEGORY, a aplicação será visível na tela inicial do emulador e será uma aplicação que o usuário poderá iniciar clicando no ícone da aplicação. É possível definir categorias customizadas que, em conjunto com a ação, serão utilizadas pelo IntentFilter para interpretar a intent. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Implementação • Ações a serem trabalhadas • Criar um IntentFilter; • Configurar ação e categoria; • Analisar o uso da ação e categoria quando mais de uma Activity esta configurada para a ação. Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Por que criar uma ação e categoria para uma Intent? • Se sabemos que é possível iniciar uma activity usando o nome da classe, por que é preciso definir uma ação? • Uma intent é uma mensagem enviada ao sistema operacional, onde qualquer processo pode responder a esta mensagem; • Portanto talvez, uma activity de outra aplicação seja executada, e não exatamente a da nossa aplicação; • Uma ação e categoria é uma forma excelente de fazer com que aplicações em processos diferentes se comuniquem; • Desta forma, a ação e a categoria juntas, criam um alvo “certeiro” não gerando dúvidas no processo de comunicação; Programação de Dispositivos Móveis – 7º Período Intent e Intent Filter Por que criar uma ação e categoria para uma Intent? Activity Programação de Dispositivos Móveis – 7º Período Dúvidas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva Programação de Dispositivos Móveis – 7º Período Próxima Aula • Desenvolvimento de um aplicativo básico usando o Google Android: Interface Gráfica (Parte 1) Programação de Dispositivos Móveis – 7º Período Referências • Google Android: aprenda a criar aplicações para dispositivos móveis com o Android SDK - Ricardo R. Lacheta, São Paulo: Novatec, 2010. • Sites: • http://blog.tecsinapse.com.br/post/21322036778/entendendo-asintents-do-android-parte-2 Programação de Dispositivos Móveis – 7º Período