Quero obter longitude e latitude no emulador Android para teste.
Alguém pode me orientar como conseguir isso?
Como faço para definir o local do emulador para uma posição de teste?
Quero obter longitude e latitude no emulador Android para teste.
Alguém pode me orientar como conseguir isso?
Como faço para definir o local do emulador para uma posição de teste?
Respostas:
Você pode se conectar ao emulador via Telnet. Você tem um console de emulador que permite inserir determinados dados, como correções geográficas, rede etc.
Como usar o console é explicado extensivamente aqui . Para conectar-se ao console, abra uma linha de comando e digite
telnet localhost 5554
Em seguida, você pode usar o comando geo para definir uma latitude, longitude e, se necessário, altitude no dispositivo que é passado a todos os programas usando o provedor de localização por GPS. Consulte o link acima para obter mais instruções.
O comando específico a ser executado no console é
geo fix <longitude value> <latitude value>
Achei este site útil para encontrar um lat / lng realista: http://itouchmap.com/latlong.html
Se você precisar de mais de uma coordenada, poderá usar um arquivo kml com uma rota, além disso, é um pouco descrito neste artigo . Não consigo encontrar uma fonte melhor no momento.
geo fix
comando está disponível apenas se você auth
primeiro. Pode ser vale a pena mencionar ...
Ninguém aqui mencionou a solução incorporada do próprio emulador; portanto, para futuros visitantes, eu gostaria de compartilhá-lo com recursos visuais.
Primeiro, execute o seu Emulador Android e clique no botão de menu (3 pontos) mostrado abaixo:
Em seguida, no painel esquerdo, selecione Localização e altere as coordenadas de acordo com suas necessidades. Depois de pressionar o botão Enviar , as alterações entrarão em vigor imediatamente (eu recomendo que você abra o Google Maps para entender melhor).
Versão do Android Studio: 2.3.3
Além disso, para tornar seus diferentes locais chegando ao seu aplicativo em tempo real, você pode usar o arquivo GPX. É muito fácil criar esse arquivo no link de direção do Google Map:
Use o botão "Carregar GPS / KML" para carregar o arquivo criado no seu emulador, escolha a velocidade e pressione o botão verde de reprodução na parte inferior. Os locais serão enviados em tempo real, como mostra a figura abaixo.
Eu estava procurando uma maneira melhor de definir as coordenadas GPS do emulador do que usar geo fix
e determinar manualmente as coordenadas específicas de latitude e longitude.
Incapaz de encontrar qualquer coisa, montei um pequeno programa que usa o GWT e a API do Google Maps para iniciar uma ferramenta de mapa baseada em navegador para definir a localização do GPS no emulador:
Espero que possa ser útil para ajudar outras pessoas que, sem dúvida, também tropeçarão nessa dificuldade / questão.
ConnectionRefused
mensagem se eu iniciar o emulador de GPS antes de iniciar o dispositivo virtual Android. Na parte superior do meu navegador também diz "Erro fazendo conexão na porta 5554 ..." Tudo funciona bem se eu clicar no botão "Alterar emulador de porta" para reconectar
geo fix 42,42 42,42 42
vírgulas em vez de pontos.
Se você estiver usando Eclipse
, vá para Window->Open Perspective->DDMS
, digite um Location Controls
e pressione Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Alguma idéia de por que não está funcionando? Eu estou usando o Nexus 4 AVD padrão
Para usuários do Android Studio:
execute o emulador,
Então vá para Tools -> Android ->Android device monitor
abra a Emulator Control
guia e use o grupo de controles de localização.
Supondo que você tenha um mapview configurado e em execução:
MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();
myLocation.runOnFirstFix(new Runnable() {
public void run() {
GeoPoint pt = myLocation.getMyLocation();
}
});
Você precisará da seguinte permissão no seu manifesto:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
E para enviar coordenadas simuladas para o emulador do Eclipse, vá para o menu "Janela", selecione "Mostrar modo de exibição"> "Outros"> "Controle do emulador" e é possível enviar coordenadas no painel de controle do emulador exibido.
runOnFirstFix
? Como esse é o evento gerado quando o dispositivo recebe a posição GPS pela primeira vez, portanto, se alguma vez foi gerado, getMyLocation
definitivamente deve retornar um valor.
Para o novo emulador:
http://developer.android.com/tools/devices/emulator.html#extended
Basicamente, clique no botão de três pontos nos controles do emulador (à direita do emulador) e ele abrirá um menu que permitirá que você controle o emulador, incluindo a localização
1. Usuários do Android Studio.
Depois de executar o emulador, vá para Ferramentas-> Android-> Monitor de dispositivo Android
Clique na guia Emulator Control Change no grupo de controles de localização.
2. Usuários do Eclipse.
Primeiro no Eclipse No menu Selecione "Janela", selecione "Abrir perspectiva" e depois selecione "DDMS". ie Janela-> Abrir Prespectiva-> DDMS.
Você verá no painel de dispositivos do lado esquerdo e, no lado direito, verá guias diferentes. Selecione a guia "Emulator Control".
Na parte inferior, você verá o Painel de controles de localização. Selecione a guia "Manual".
Digite Longitude e Latitude nas caixas de texto e clique no botão Enviar. Ele enviará a posição para o emulador e o aplicativo.
3. Usando o telnet.
No comando executar, digite isso.
telnet localhost 5554
Se você não estiver usando o Windows, poderá usar qualquer cliente de telnet.
Após conectar-se ao telnet, use o seguinte comando para enviar sua posição ao emulador.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Use a ferramenta de mapas do Google baseada no navegador
Existe um programa que usa o GWT e a API do Google Maps para iniciar uma ferramenta de mapa baseada no navegador para definir a localização do GPS no emulador:
Usando o comando "geo" no console do emulador
Para enviar dados de localização simulados a partir da linha de comando:
Inicie seu aplicativo no emulador do Android e abra um terminal / console no diretório / tools do SDK.
Conecte-se ao console do emulador:
telnet localhost 5555
(Substitua 5555 por qualquer porta em que seu emulador esteja sendo executado)
Envie os dados da localização: * correção geográfica para enviar uma localização geográfica fixa.
Este comando aceita uma longitude e latitude em graus decimais e uma altitude opcional em metros. Por exemplo:
geo fix -121.45356 46.51119 4392
Eu escrevi um script python para enviar os locais dos gps para o emulador via telnet. Ele define uma fonte e um local de destino. Há também um deslocamento de tempo que permite controlar por quanto tempo as coordenadas serão enviadas ao dispositivo. Um local está sendo enviado uma vez por segundo.
No exemplo abaixo, o script muda de Berlim para Hamburgo em 120 segundos. Localização de um passo / gps por segundo com distâncias aleatórias.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random
HOST = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120
LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
lat = LAT_SRC
lng = LNG_SRC
tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")
for i in range(SECONDS):
lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
#tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(lng, lat))
#tn.write("exit\n")
sleep(1)
tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")
print tn.read_all()
Eu uso a função DDMS do plug eclipse para enviar GPS.
No Linux, onde as portas de comunicação estão bloqueadas. navegue no terminal para a pasta platform-tools dentro android sdk
e dispare este comando:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
No Mac, Linux ou Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Isso o colocará na Cidade do México. Mude sua longitude / latitude / altitude de acordo. Isso deve ser suficiente se você não estiver interessado em nmea.
A seguinte solução funcionou para mim - abra a linha de comando e escreva:
adb emu geo fix [longtitude] [latitude]
Finalmente, com a versão mais recente do Android Studio 4 e sua nova atualização do Emulador, 23/10/2019, ficou mais fácil. Inicie o seu emulador e vá para os parâmetros do emulador ...> na guia "Rotas", você pode escolher dois pontos no mapa de / para e iniciar uma nova rota com uma velocidade de reprodução ajustável que pode chegar a mais de 1000 km / h!
Vejo Obtenção da localização do usuário
Procure em Fornecendo dados de localização simulados . Você encontrará a solução para isso.
Primeiro vá na seção DDMS no seu eclipse. Em seguida, abra o controle do emulador .... Vá para a seção Manual, defina lat e long e pressione o botão Enviar
Eu estava tentando definir a correção geográfica por meio de adb por muitos pontos e não consegui que meu aplicativo visse dados de GPS. Mas quando tentei abrir o DDMS, selecionar o processo do meu aplicativo e enviar coordenadas pela guia de controle do emulador funcionou imediatamente.
Se você estiver usando o Android Studio (1.3):
Basta transformar a resposta de Alberto Gaona em uma linha
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 é o número da porta do emulador mostrado em adb devices
.
Teria sido melhor se o adb emu
trabalho.
Se as soluções acima não funcionarem. Tente o seguinte:
Dentro do seu Android Manifest.xml, adicione os dois links a seguir FORA da marca do aplicativo, mas é claro que dentro da marca do seu manifesto
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Não foi possível obter uma correção de GPS no emulador quando o emulador estava executando a imagem do Android sem as APIs do Google. Assim que alterei a imagem para conter as APIs do Google, todas as maneiras mencionadas aqui para que uma correção de GPS funcionasse.
Certifique-se de selecionar uma imagem com as APIs do Google ao criar o AVD.
A resposta múltipla já mencionada para usar o comando shell " correção geográfica ... " é a resposta correta. Mas, caso você use LocationClient.getLastLocation () para recuperar seus dados, vale ressaltar que eles não funcionarão inicialmente. A classe LocationClient usa o Serviço Google Play para recuperar as coordenadas. Para mim, isso começou a funcionar depois de executar o aplicativo de mapas de emuladores uma vez. Durante o primeiro início, você deve permitir o acesso do Google Apps à sua localização, o que eu acho que faz o truque.
Para um projeto próprio, desenvolvi um serviço online que pode fornecer local simulado para o emulador do Android.
Ele usa geo nmea em vez de geo fix, o que permite definir velocidade, curso, tempo preciso etc., além de apenas lat / lon.
O serviço requer o utilitário de linha de comando nc (netcat) e nada mais.
Você pode usar um emulador como o genymotion, que oferece a flexibilidade de emular sua localização GPS atual, etc.
Existe um plugin para o Android Studio chamado "Mock Location Plugin". Você pode emular vários pontos com este plugin. Você pode encontrar um manual detalhado de uso neste link: Android Studio. Simule vários pontos GPS com o Mock Location Plugin
Abra o Android studio-> Menu Ferramentas-> Android-> Android Device Monitor-> Guia Emulador-> Controle de localização-> Defina a latitude e longitude necessárias e verifique seu projeto conforme sua necessidade
No eclipse:
Talvez você precise arrastar a janela DDMS para baixo. 'Controles de localização' está localizado em 'Ações de telefonia' e pode estar oculto por uma visualização de console de tamanho normal (a barra com console, LogCat etc. pode estar cobrindo a visualização!)
~