Como emular a localização do GPS no emulador do Android?

444

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?

UMAR
fonte
Se você estiver usando o Genymotion: stackoverflow.com/questions/30709329/…
Hachem Benyahia 9/09/16
Você pode instalar um dos muitos aplicativos de localização simulada na Play Store.
precisa saber é o seguinte

Respostas:

443

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.

Janusz
fonte
13
usando a correção geográfica, também defini latitude e longitude simuladas, ainda obtendo localização nula.
UMAR
2
ou de maneira simples, ligue os gps no emulador e vá para o controle do emulador, dê valores fictícios de lat e longos e envie esses valores no emulador como um local de gps.
UMAR 23/05
35
Como instalar o adb emu geo 30.219470 -97.745361
Bryan Rehbein
12
Cuidado com a ordem, antes de lat!
Christoph
14
O geo fixcomando está disponível apenas se você authprimeiro. Pode ser vale a pena mencionar ...
aroth
126

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:

emulador com botão de menu

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).

insira a descrição da imagem aqui

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:

  1. Vá para o google map, escolha um local, pressione "Direções" e insira o segundo local.
  2. Após a rota ser criada, copie um link do navegador
  3. Acesse este site: https://mapstogpx.com e cole o link na caixa "Let's Go"
  4. Pressione o botão "Let's Go" e o arquivo GPX será baixado

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.

insira a descrição da imagem aqui

Éden
fonte
nesta solução precisa de um serviço de jogos no emulador?
Kevan Aghera 06/04/19
Acho que não.
Eden
Quando eu abro o aplicativo no emulador do cliente da API do Google null, não é possível carregar o mapa no emulador. e dispositivo móvel não há problema para mim.
Kevan Aghera 06/04/19
4
Confirmo que não é necessário fazer login na sua Conta do Google para fazer isso. Legal!
xarlymg89
3
Eu tive que reiniciar o sistema operacional emulado para reconhecê-lo.
Nate Whittaker
109

Eu estava procurando uma maneira melhor de definir as coordenadas GPS do emulador do que usar geo fixe 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:

android-gps-emulator

Espero que possa ser útil para ajudar outras pessoas que, sem dúvida, também tropeçarão nessa dificuldade / questão.

dpdearing
fonte
uau, obrigada! A instalação funcionou muito bem, mas não consegui gerenciar uma conexão com o emulador -> log prints java.net.ConnectionRefused. então eu tentei telnet localhost 5554 (do terminal) e funcionou .. alguém mais testou seu emulador com sucesso no mac?
Otavel142
1
Não testei, mas parece tão incrível que acho que o Google deveria contar ao mundo. Ideias simples são sempre as melhores. Por que ninguém pensou nisso?
Tiktak 28/03
@ ottel142 - Sim, na verdade estou executando em um mac sem esse problema (usando o Chrome no Mavericks). Eu vejo essa ConnectionRefusedmensagem 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
dpdearing
Exatamente o que eu precisava.
David
Este é um bom programa, mas a localização do sistema muda a maneira como os carros alegóricos funcionam. No meu sistema, tem que ser geo fix 42,42 42,42 42vírgulas em vez de pontos.
precisa
81

Se você estiver usando Eclipse, vá para Window->Open Perspective->DDMS, digite um Location Controlse pressione Send.

SteveCav
fonte
8
Este é de longe o método mais fácil que eu já vi. Certifique-se de configurar o AVD com suporte a GPS e, na perspectiva DDMS, clique no emulador que está sendo executado em Dispositivos, escolha a guia Emulator Control no painel central direito e, na parte inferior, é a seção Controles de localização que SteveCav mencionou (Usando Eclipse Juno 4.2 para desenvolvedores de Java com o ADT mais recente). O painel "Meus controles de localização" foi pré-carregado com dados de localização.
9189 Steven Spana-Zook
Ótima resposta! funciona com qualquer ide porque DDMs é parte do SDK (yoursdkfolder / ferramentas /)
Zarokka
1
Esta, nem a solução de telnet acima, estava funcionando para mim. Estou tentando obter minha localização assim, mas ainda é nula. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
3141414
Quando uso "Controles de localização" no DDMS, recebo o seguinte erro ao tentar enviar 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
emersonthis
1
Eu sou incapaz de fazer isso, os controles locais estão a cinzento
Utsav Gupta
33

Para usuários do Android Studio:

execute o emulador,

Então vá para Tools -> Android ->Android device monitor

abra a Emulator Controlguia e use o grupo de controles de localização.

ofer
fonte
No meu caso, todos os arquivos não são editáveis. Você tem alguma ideia ?
Olkunmustafa 5/10
4
@MustafaOlkun Provavelmente significa que o próprio emulador possui esses controles. Procure um "..." ao lado do emulador.
Justin
3
Eu tenho o mesmo problema. Eles não são editáveis. e sim, existe o "...". No entanto, quando eu colocar alguma coisa e enviar, nada muda sobre a aplicação ....
KansaiRobot
14

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.

David Hedlund
fonte
3
mas meu amigo onde estão a longitude e latitude ??
UMAR
1
Eu tentei usar este ans enviando valores simulados para o controle emulador, mas quando eu pressiono o botão enviar, ele não faz nada, nenhuma mensagem aparece para confirmar os valores enviados ou não. seocnd coisa GeoPoint g = myLocation.getMyLocation (); está retornando valor nulo.
UMAR
Tem certeza de que está usando dentro runOnFirstFix? Como esse é o evento gerado quando o dispositivo recebe a posição GPS pela primeira vez, portanto, se alguma vez foi gerado, getMyLocationdefinitivamente deve retornar um valor.
David Hedlund
13

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:

android-gps-emulator

Muhammad Yousaf Sulahria
fonte
Esta primeira opção funcionou para mim, com uma pequena alteração. Não consegui abrir a janela DDMS do Eclipse, apenas recebi uma página cinza em branco. Mas enquanto eu tinha o emulador em execução, se eu abrisse o DDMS em um prompt de comando (C: \ Arquivos de programas \ Android \ android-sdk \ tools \ ddms), então eu poderia ver a janela que você descreveu com Dispositivos à esquerda e "Emulator Control "guia à direita. Obrigado!
Eric Barr
10

Usando o comando "geo" no console do emulador

Para enviar dados de localização simulados a partir da linha de comando:

  1. Inicie seu aplicativo no emulador do Android e abra um terminal / console no diretório / tools do SDK.

  2. Conecte-se ao console do emulador:

    telnet localhost 5555 (Substitua 5555 por qualquer porta em que seu emulador esteja sendo executado)

  3. 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
Dan Zhao
fonte
8

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()
user937284
fonte
Funciona como um encanto! Obrigado por compartilhar.
Alberto Gaona
Mmmmm. Acho que há um pequeno erro: até onde sei, a mensagem de correção geográfica recebe Longitude e Latitude, nessa ordem: você está enviando o contrário. Veja as respostas acima.
Alberto Gaona
Não está funcionando. O emulador está escutando na porta, mas não está recebendo nada.
Durga Swaroop
5

Eu uso a função DDMS do plug eclipse para enviar GPS. insira a descrição da imagem aqui

água fervida
fonte
5

No Linux, onde as portas de comunicação estão bloqueadas. navegue no terminal para a pasta platform-tools dentro android sdke dispare este comando:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
abhishek singh
fonte
5

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.

Alberto Gaona
fonte
Pode ser necessário ajustar o 5554 à porta de escuta do emulador atual.
Alberto Gaona
5

A seguinte solução funcionou para mim - abra a linha de comando e escreva:

adb emu geo fix [longtitude] [latitude]
Asaf Pinhassi
fonte
5

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!

insira a descrição da imagem aqui

Smile2Life
fonte
4

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

sachin pareek
fonte
3

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.

James
fonte
Você não precisa especificar um processo ... Ou talvez o DDMS em 2010 exija isso.
3

Dalvik Debug Monitor> Selecione Emulador> Guia Controle de Emulador> Controles de Localização.

DDMS - android_sdk / tools / ddms OU android_sdk / tools / monitor

Dan
fonte
2

Se você estiver usando o eclipse, em seguida, usando o controlador Emulator, poderá definir manualmente a latitude e longitude e executar seu aplicativo baseado em mapa no emulador

Swapnil
fonte
2

Se você estiver usando o Android Studio (1.3):

  • Clique no menu "Ferramentas"
  • "Android"
  • "Monitor de dispositivo Android"
  • clique no seu emulador atual
  • Guia "Controle do emulador"
  • vá para "Controles de localização" e insira Lat e Lon
electrobabe
fonte
2

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 emutrabalho.

Kyaw Tun
fonte
forro muito útil! no meu caso, tive que remover os espaços entre \ n: token = $ (cat ~ / .emulator_console_auth_token); cat <(eco -e "token de autenticação $ \ ngeo correção 96.0290791 19.9041016 \ nexit") - | Nc localhost 5554
Jeremie 23/03
1

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>
ssgao
fonte
1

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.

dvim
fonte
o que você quer dizer com imagem e, ao criar o AVD, como selecionaria uma imagem com as APIs do Google? não existem opções enquanto cria o AVD no eclipse.
user1911703
Verifique se você baixou imagens com as APIs do Google por meio do gerenciador do SDK do Android.
dvim
1

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.

Maik
fonte
1

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.

http://www.kisstech.ch/nmea/

Gerhard Wesp
fonte
1

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

Premkumar Manipillai
fonte
você pode definir o valor do local estático (latitude e longitude), que local precisa verificar diretamente na parte de codificação?
Premkumar Manipillai
0

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!)

~

Droid Teahouse
fonte
Dentro do DDMS eu encontrei em Emulator Control. Guia abaixo de Controles de localização.
user914425