Programação para a Plataforma Android Aula 13. Localização

Documentos relacionados
PROPOSTA DE UM PADRÃO DE PROJETO PARA ANDROID UTILIZANDO A WEB

Programação para a Plataforma Android Aula 7. Mul$mídia

Programação para Dispositivos Móveis

Programação para a Plataforma Android Aula 16. Fragmentos

Programação para a Plataforma Android Aula 2. Aula 2 Views

Comunicação entre A0vidades

Programação para a Plataforma Android Aula 17. Broadcasts

Login. Criar uma nova Activity. Login. Luiz Eduardo Guarino de Vasconcelos

Programação para Dispositivos Móveis

Comunicação via Sockets

Tutorial Android Speech

Provedores de Conteúdo

Programação em Java para a Plataforma Android AULA 1. Primeiros Passos

Introdução ao Desenvolvimento para Sistema Operacional Android

Apresentação de um Processo Cria4vo de Desenvolvimento de uma App Android. Realização de Dinâmica Hands- On para Construção de uma App Android

Armazenamento Persistente de Dados

TUTORIAL ANDROID ACTIVITY - CONSTRUÇÃO DE TELAS

Programação de Dispositivos Móveis

Programação para a Plataforma Android Aula 11. Banco de Dados

Navegar entre páginas Necessário o uso de Intent. Intenção de ir a algum lugar, acessar outros recursos, outros apps.

Android Layout Manager. Ivan Nicoli

Retrofit. Criar um novo projeto. Selecionar a API. Retrofit para consumir Web Service Luiz Eduardo Guarino de Vasconcelos

Criando as primeiras telas (Activity)

Módulo 2 - Novas Activities Android. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

Módulo 4 - Interface Gráfica Gerenciadores de Layout. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

Avisos e Notificações aos Usuários

G-SMS: Protótipo de uma aplicação de envio de SMS georeferenciadas

Programando Intenções. Prof. Fellipe Aleixo

Programação de Dispositivos Móveis

Programa de Dispositivos Móveis

Mais Elementos da Interface com o Usuário. Prof. Fellipe Aleixo

Log, Ciclo de Vida e Diálogos. Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

Módulo 3 - Intenções. SECAP 2014 Prof. Rone Ilídio - UFSJ

Introdução à Programação Android: LocationManager

Usando e Gerenciando Activities

Computação Móvel Activity (Ref. Cap. 4)

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Android DEFINIÇÕES E CICLO DE VIDA. Prof. Dr. Joaquim assunção.

Trabalhando com Mensagens. File > New > New Project. Uso de mensagens (Toast) Luiz Eduardo Guarino de Vasconcelos

Primeira Aplicação Android Olá Mundo. Prof. Fellipe Aleixo

Programação para a Plataforma Android Aula 4. Objetos Gráficos

Prof: Ricardo Quintão Site:

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Android: Ciclo de vida da Activity

Programa de Dispositivos Móveis

Fragments. Criar um novo projeto. Selecionar a API. Navigation Drawer Activity. Fragments. Luiz Eduardo Guarino de Vasconcelos

Android. Interfaces: widgets

Curso de Android - 2 Novas Activities. SECAP Prof. Rone Ilídio - UFSJ

HCI Summer Workshop. Android #1. Tiago Guerreiro.

Android Activity. Ivan Nicoli

Projeto GoHome Tutorial Sobre o serviço do Google Maps no Android

Android Banco de Dados. Ivan Nicoli

Desenvolvimento para Android Prá9ca 2. Prof. Markus Endler

Introdução ao Android. SECAP 2014 Prof. Rone Ilídio - UFSJ

Professor: Rogério Benedito de Andrade. Formação:

============================== Exemplo ListView MainActivity.java

Android OLÁ MUNDO MÓVEL. Prof. Dr. Joaquim assunção.

Programação para Dispositivos Móveis. Banco de Dados (SQLite)

Programação para Dispositivos Móveis

Firebase. Acesse o site Acesse o menu Go to Console. Acesse com uma conta Google ou crie uma conta.

Desenvolvimento de um aplicativo básico usando o Google Android

Prof: Ricardo Quintão Site:

Desenvolvimento de Aplicativos Android

Android Core. Felipe Silveira felipesilveira.com.br. Aula 6

Mensagens. Para conhecimento. Renomear arquivos. Botão Direito no arquivo > Rafactor > Rename Shift + F6

Descrição geral do Android

itec h- ON & E ngenharia de S oftware Joel Carvalho - 05/05/2011 Novas Tecnologias Aplicadas à Eng. de So5.

Computação II Orientação a Objetos

Programação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho

Programa de Dispositivos Móveis

AlarmManager. Programação em Dispositivos Móveis (PDM) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Armazenamento de dados

Desenvolvimento Android. Pontapé inicial...

Introdução ao Android. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Programação para Dispositivos Móveis

Computação Móvel Gerenciadores de Layout (Ref. Cap. 6)

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

Programa Analítico de Disciplina INF311 Programação para dispositivos móveis

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler

Programação para Android. Aula 08: Persistência de dados SQL

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Fatores de Qualidade de So?ware

Desenvolvimento de um aplicativo básico usando o Google Android

Computação Móvel ActionBar e Temas (Ref. Cap. 5)

Desenvolvedor Android: Avançado. Plano de Estudo

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Programação Android. Aula 03

Capítulo 02: Cadastro de Alunos

Introdução ao Google Android

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Android INTERFACE GRÁFICA & LAYOUT. Prof. Dr. Joaquim assunção.

Prof: Ricardo Quintão Site:

Android Binding. Implementando o padrão de projeto MVVM com MVVM_. Saiba como criar um projeto utilizando o padrão de projeto MVVM no Android

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Geração Automática de Código Android Eficiente a partir de Modelos UML

Universidade Federal do Paraná

Engenharia de Software

Transcrição:

Programação para a Plataforma Android Aula 13 Localização O que são serviços baseados em localização? Como usar a API de mapas do Google? Como sobrepor diferentes visões a um mapa? Como integrar o mapa aos demais componentes gráficos? Quais visões podem ser acopladas à mapas? Como usar serviços de localização sem mapas?

Onde Estou? Que recursos um smart phone pode usar para saber a própria localização?

Provedores de Localização Android suporta sensores que captam sinais de satélites do sistema Geo Posi(oning Systems (GPS). Android suporta sensores que determinam a localização do aparelho móvel via triangulação com redes de telefonia celular. Android também suporta provedores de localização baseados em redes wi fi.

Onde estou? Serviço de localização: Escreva uma aplicação que imprima em uma caixa de texto simples a localização do aparelho móvel, e o servidor de localização utilizado para determiná-la.

Permissões <?xml version="1.0" encoding="uv 8"?> <manifest xmlns:android="hzp://schemas.android.com/apk/res/android" package="com.aula13" android:versioncode="1" android:versionname="1.0"> <uses permission android:name="android.permission.access_coarse_location" /> <uses permission android:name="android.permission.access_fine_location" /> <applicabon android:icon="@drawable/icon" android:label="@string/app_name"> <acbvity android:name=".aulaacbvity13" android:label="@string/app_name"> <intent filter> <acbon android:name="android.intent.acbon.main" /> <category android:name="android.intent.category.launcher" /> </intent filter> </acbvity> </applicabon> <uses sdk android:minsdkversion="2" /> </manifest> Nós já vimos um tipo de permissão antes. Qual?

Layout Informações de localização serão impressas em uma caixa de texto. Essas informações podem ocupar uma string maior que os limites da caixa de texto. Mas, por agora, já sabemos como construir esse layout!

main.xml ScrollView Passemos agora à atividade <?xml version="1.0" encoding="uv 8"?> <ScrollView xmlns:android="hzp://schemas.android.com/apk/res/android" android:orientabon="verbcal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/output" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView>

Abvidade de Localização public class AulaAcbvity13 extends Acbvity implements Loca.onListener { @Override public void oncreate(bundle savedinstancestate) {... @Override protected void onresume() {... O que deveria ser feito em @Override onresume? protected void onpause() {... AulaAcbvity13.java Quais eventos de localização devem existir? E o que deveria ser feito em onpause?

onresume/onpause AulaAcbvity13.java private Loca.onManager mgr; private String best; @Override protected void onresume() { super.onresume(); mgr.requestlocabonupdates(best, 15000, 1, this); @Override protected void onpause() { super.onpause(); mgr.removeupdates(this); Que tipo de objeto é esse? E por que onpause foi implementado assim? O que serão esses parâmetros? O que onresume está fazendo? Mas como será o método oncreate?

oncreate @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); Temos de implementar esse log. O que um objeto desse sabe fazer? mgr = (LocabonManager) getsystemservice(location_service); output = (TextView) findviewbyid(r.id.output); log("locabon providers:"); dumpproviders(); Criteria criteria = new Criteria(); best = mgr.getbestprovider(criteria, true); log("\nprovedor escolhido: " + best); log("\nlocalizacao (comecando com ulbma conhecida):"); Loca.on locabon = mgr.getlastknownlocabon(best); dumplocabon(locabon); O que se passa aqui?

Eventos de Localização A nossa abvidade é também um escutador de eventos de localização. Quais seriam os eventos de localização? AulaAcbvity13.java public class AulaAcbvity13 extends Acbvity implements Loca.onListener {

Eventos de Localização public void onlocabonchanged(locabon locabon) { ; public void onproviderdisabled(string provider) { ; public void onproviderenabled(string provider) { ; Como seria a implementação de cada um desses métodos? public void onstatuschanged(string provider, int status, Bundle extras) { ; AulaAcbvity13.java

Eventos de Localização public void onlocabonchanged(locabon locabon) { dumplocabon(locabon); public void onproviderdisabled(string provider) { log("\nprovedor inoperante: " + provider); public void onproviderenabled(string provider) { log("\nprovedor operante: " + provider); O que é esse parâmetro status? Temos um arranjo para criar! public void onstatuschanged(string provider, int status, Bundle extras) { log("\no estado do provedor mudou: " + provider + ", status=" + S[status] + ", extras=" + extras);

Eventos de Localização public void onlocabonchanged(locabon locabon) { dumplocabon(locabon); public void onproviderdisabled(string provider) { log("\nprovedor inoperante: " + provider); private stabc final String[] S = { "out of service", public void onproviderenabled(string provider) { "temporarily unavailable", log("\nprovedor operante: " + provider); "available" Temos de implementar os outros métodos de nossa atividade. Vocês lembram quais são eles? }; public void onstatuschanged(string provider, int status, Bundle extras) { log("\no estado do provedor mudou: " + provider +, status=" + S[status] + ", extras=" + extras);

AulaAcbvity13.java Os dump s private void log(string string) { output.append(string + "\n"); private void dumplocabon(locabon locabon) { if (locabon == null) log("\nlocabon[unknown]"); else log("\n" + locabon.tostring()); private void dumpproviders() { List<String> providers = mgr.getallproviders(); for (String provider : providers) { dumpprovider(provider); Esse método, dumpprovider, ainda precisa ser implementado.

AulaAcbvity13.java Informações de Localização private void dumpprovider(string provider) { LocabonProvider info = mgr.getprovider(provider); StringBuilder builder = new StringBuilder(); Novamente, precisamos definir alguns arranjos. builder.append("locabonprovider[").append("name=").append(info.getname()).append(",enabled=").append(mgr.isproviderenabled(provider)).append( ",getaccuracy=").append(a[info.getaccuracy() + 1]).append( ",getpowerrequirement=").append(p[info.getpowerrequirement() + 1]).append(",hasMonetaryCost=").append(info.hasMonetaryCost()).append( ",requirescell=").append(info.requirescell()).append( ",requiresnetwork=").append(info.requiresnetwork()).append( ",requiressatellite=").append(info.requiressatellite()).append( ",supportsalbtude=").append(info.supportsalbtude()).append( ",supportsbearing=").append(info.supportsbearing()).append( ",supportsspeed=").append(info.supportsspeed()).append("]"); log(builder.tostring()); O que é isso?

Informações de Localização private sta.c final String[] A = { "invalid", private void dumpprovider(string provider) { LocabonProvider info = mgr.getprovider(provider); "n/a", StringBuilder builder = new StringBuilder(); "fine", builder.append("locabonprovider[").append("name=").append(info.getname()) "coarse".append(",enabled=").append(mgr.isproviderenabled(provider)).append( ",getaccuracy=").append(a[info.getaccuracy() + 1]).append( }; ",getpowerrequirement=").append(p[info.getpowerrequirement() + 1]).append(",hasMonetaryCost=").append(info.hasMonetaryCost()).append( private sta.c final String[] P = { ",requirescell=").append(info.requirescell()).append( "invalid", ",requiresnetwork=").append(info.requiresnetwork()).append( "n/a", ",requiressatellite=").append(info.requiressatellite()).append( ",supportsalbtude=").append(info.supportsalbtude()).append( "low", ",supportsbearing=").append(info.supportsbearing()).append( "medium", ",supportsspeed=").append(info.supportsspeed()).append("]"); "high" log(builder.tostring()); };

Emulador Se tentarmos carregar a aplicação, não obteremos nenhuma informação de localização. Podemos passar essas informações pelo emulador, na tela Emulator Control View. Window > Show View > Other... > Android > Emulator Control

Simulando a Localização Se tentarmos carregar a aplicação, não obteremos nenhuma informação de localização. Podemos passar essas informações pelo emulador, na tela Emulator Control View. Window > Show View > Other... > Android > Emulator Control

Locabon Tracker Rastreador de caminho: Implemente um rastreador de caminho, que grave a sequência de posições percorridas pelo dispositivo móvel, e que imprima a distância total percorrida. Como será esse layout?

<LinearLayout xmlns:android="h;p://schemas.android.com/apk/res/android" android:id="@+id/root" android:orientabon="ver(cal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/lat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/la;ext"/> <EditText android:id="@+id/latname" android:focusable="false" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <TextView android:id="@+id/lon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/lontext"/> <EditText android:id="@+id/lonname" android:focusable="false" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <TextView android:id="@+id/dist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dis;ext"/> <EditText android:id="@+id/distname" android:focusable="false" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> tracker.xml Locabon Tracker Qual o modelo dessa aplicação?

Tracker.java Tracker public class Tracker extends Acbvity implements LocabonListener { private LocabonManager mgr; private List<Locabon> track; private String best; private EditText lat; private EditText lon; private EditText dist; O que é preciso ser feito no método oncreate?

Tracker.java oncreate public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.tracker); track = new ArrayList<Locabon>(); mgr = (LocabonManager) getsystemservice(location_service); Criteria criteria = new Criteria(); best = mgr.getbestprovider(criteria, true); this.lat = (EditText) findviewbyid(r.id.latname); this.lon = (EditText) findviewbyid(r.id.lonname); this.dist = (EditText) findviewbyid(r.id.distname); updateloca.on(); Como seria este método de atualizar a localização?

Atualizando a Localização Tracker.java private void updatelocabon() { Locabon locabon = mgr.getlastknownlocabon(best); lat.settext(string.valueof(locabon.getlabtude())); lon.settext(string.valueof(locabon.getlongitude())); dist.settext(computepathlength() + "m"); this.track.add(locabon); E como podemos calcular a distância percorrida?

Tracker.java Calculando distâncias private CharSequence computepathlength() { if (track.size() == 0) { return "0"; else { Locabon last = track.get(0); double dist = 0.0; for (int i = 1; i < this.track.size(); i++) { Locabon newloc = this.track.get(i); dist += last.distanceto(newloc); last = newloc; return String.valueOf(dist); Precisamos algora implementar os métodos de eventos. Vocês lembram que métodos são esses? Na verdade, precisamos de escrever somente um!

Eventos de Localização public void onlocabonchanged(locabon locabon) { ; O que escrevemos aqui? public void onproviderdisabled(string provider) { public void onproviderenabled(string provider) { public void onstatuschanged(string provider, int status, Bundle extras) {

Eventos de Localização public void onlocabonchanged(locabon locabon) { this.updatelocabon(); public void onproviderdisabled(string provider) { Mesmo que não usemos os métodos, precisamos public void onproviderenabled(string provider) { implementá-los. Por que? E o que normalmente se faz para evitar esse public void onstatuschanged(string provider, transtorno? int status, Bundle extras) {

Poupando Recursos Tracker.java @Override protected void onresume() { super.onresume(); mgr.requestlocabonupdates(best, 15000, 1, this); @Override protected void onpause() { super.onpause(); mgr.removeupdates(this); E se quiséssemos calcular a velocidade de deslocamento, o que precisaria ser feito?

Probleminha Besta Tracker.java private void updatelocabon() { Locabon locabon = mgr.getlastknownlocabon(best); lat.settext(string.valueof(locabon.getlabtude())); lon.settext(string.valueof(locabon.getlongitude())); dist.settext(computepathlength() + "m"); this.track.add(locabon); Notem que a distância somente aparece quando enviamos valores para o emulador duas ou mais vezes. A posição original não está sendo levada em consideração quando computamos a distância. Como resolver esse problema?

Easy Fix Tracker.java private void updatelocabon() { Locabon locabon = mgr.getlastknownlocabon(best); lat.settext(string.valueof(locabon.getlabtude())); lon.settext(string.valueof(locabon.getlongitude())); this.track.add(locabon); dist.settext(computepathlength() + "m"); Estamos computando a distância antes de inserirmos as coordenadas da última localização.