web-dev-qa-db-ja.com

AndroidエミュレータでGPS位置情報をエミュレートする方法は?

テスト用にAndroidエミュレータで経度と緯度を取得したいです。

誰かがこれを達成する方法を私に導くことができますか?

エミュレータの位置をテスト位置に設定する方法

411
UMAR

Telnet経由でエミュレータに接続できます。これで、ジオフィックス、ネットワークなどの特定のデータを入力できるエミュレータコンソールができます。

コンソールの使い方は広範囲に説明されています ここ 。コンソールに接続するには、コマンドラインを開いて次のように入力します。

telnet localhost 5554

その後、geoコマンドを使用して、gpsロケーションプロバイダーを使用してすべてのプログラムに渡される緯度、経度、および必要に応じて高度をデバイスに設定できます。詳しい手順については上記のリンクを参照してください。

コンソールで実行する特定のコマンドは、

geo fix <longitude value> <latitude value>

現実的な緯度/経度を見つけるのにこのサイトが便利だと思っています: http://itouch inn/latlong.html

複数の座標が必要な場合は、ルートを含むkmlファイルを使用することもできます。これは article に少し説明されているものです。現時点でより良い情報源を見つけることができません。

426
Janusz

私はgeo fixを使用して手動で特定の緯度と経度の座標を決定するよりエミュレータのGPS座標を設定するより良い方法を探していました。

何も見つからないので、GWTとGoogle Maps APIを使ってブラウザベースの地図ツールを起動してエミュレータにGPSの位置を設定する小さなプログラムをまとめました。

Android-gps-emulator

うまくいけば、この難しさや疑問にも出会うことが間違いない他の人を助けるために役立つことができます。

Android-gps-emulator

105
dpdearing

Eclipseを使用している場合は、Window->Open Perspective->DDMSに移動し、Location Controlsに1と入力してSendを押します。

80
SteveCav

エミュレータ自体の内蔵ソリューションについては誰もここで言及していません。今後の訪問者のために、私はそれをビジュアルと共有したいと思います。

まず、あなたのAndroid Emulatorを起動し、以下に示すメニューボタン(3つの点)をクリックしてください。

emulator with menu button

次に左ペインから Location を選択し、必要に応じて座標を変更します。 送信 ボタンを押すと、変更がすぐに反映されます(理解を深めるためにGoogleマップを開くことをお勧めします)。

enter image description here

Android Studioバージョン:2.3.3

59
eden

Android Studioユーザーの場合:

エミュレータを起動します。

それから、Tools -> Android ->Android device monitorに行きます

Emulator Controlタブを開き、位置管理グループを使用します。

32
ofer

1. Android Studioユーザー。

エミュレータを実行した後、[ツール] - > [Android] - > [Androidデバイスモニタ]に移動します。

[ロケーションコントロール]グループから[エミュレータコントロール]タブの変更をクリックします。

2. Eclipseユーザー。

最初にEclipseのメニューで「ウィンドウ」を選択し、次に「パースペクティブを開く」を選択してから「DDMS」を選択します。すなわち、ウィンドウ - > Open Prespective - > DDMS。

左側のデバイスパネルに表示され、右側には異なるタブが表示されます。 [エミュレータコントロール]タブを選択します。

一番下にはLocation Controls Panelがあります。 「手動」タブを選択してください。

テキストボックスに経度と緯度を入力し、送信ボタンをクリックします。それはあなたのエミュレータとアプリケーションに位置を送ります。

3. telnetを使用します。

実行コマンドでこれを入力します。

telnet localhost 5554

Windowsを使用していない場合は、任意のtelnetクライアントを使用できます。

Telnetで接続したら、次のコマンドを使って自分の位置をエミュレータに送信します。

geo fix long lat    
geo fix -121.45356 46.51119 4392

4.ブラウザベースのGoogleマップツールを使用する

GWTとGoogle Maps APIを使用してブラウザベースの地図ツールを起動し、エミュレータにGPSの位置を設定するプログラムがあります。

Android-gps-emulator

新しいエミュレータの場合:

http://developer.Android.com/tools/devices/emulator.html#extended

基本的に、エミュレータコントロール(エミュレータの右側)の3つのドットボタンをクリックすると、メニューが表示されます。このメニューで、場所を含むエミュレータを制御できます

13
f.khantsis

Mapviewを設定して実行していると仮定します。

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();
    }
});

マニフェストには次の権限が必要です。

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>

Eclipseからエミュレータに擬似座標を送信するには、[ウィンドウ]メニューに移動し、[ビューの表示]> [その他]> [エミュレータコントロール]を選択します。表示されるエミュレータコントロールペインから座標を送信できます。

13
David Hedlund

エミュレータコンソールで "geo"コマンドを使用する

コマンドラインからモックロケーションデータを送信するには

  1. Androidエミュレータでアプリケーションを起動し、SDKの/ toolsディレクトリにあるターミナル/コンソールを開きます。

  2. エミュレータコンソールに接続します。

    telnet localhost 5555(5555をあなたのエミュレータが実行しているポートに置き換えてください)

  3. 位置データを送信します。* geo fixは、固定の地理位置を送信します。

    このコマンドは、経度と緯度(10進数)、およびオプションの高度(メートル)を受け入れます。例えば:

    geo fix -121.45356 46.51119 4392
    
10
Dan Zhao

私はtelnet経由でエミュレータにgpsの場所をプッシュするためのPythonスクリプトを書きました。発信元と宛先の場所を定義します。また、どのくらいの時間座標をデバイスにプッシュするかを制御できる時間オフセットもあります。ある場所は1秒に1回プッシュされています。

以下の例では、スクリプトは120秒でベルリンからハンブルクに移動します。ランダムな距離で1秒あたり1ステップ/ gpsの位置。

#!/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()
8
user937284

Mac、Linux、またはCygwinの場合:

echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554

それはメキシコシティにあなたを置きます。それに応じてあなたの経度/緯度/高度を変更してください。あなたがnmeaに興味がなければそれで十分なはずです。

5
Alberto Gaona

GPSを送るのにEclipseプラグDDMS機能を使います。 enter image description here

5
boiledwater

通信ポートがブロックされているLinuxの場合。端末をAndroid sdk内のplatform-toolsフォルダーに移動して、次のコマンドを起動します。

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

次の解決策は私のために働いた - コマンドラインを開いて書く:

adb emu geo fix [longtitude] [latitude]
4
Asaf Pinhassi

を参照してください。ユーザーロケーションの取得

モック位置データの提供 を見てください。あなたはそれに対する解決策を見つけるでしょう。

4
daemon54

最初にあなたのEclipseのDDMSセクションに行き、エミュレータコントロールを開いてください。マニュアルセクションに行き、latとlongをセットしてからSendボタンを押してください。

4
sachin pareek

Dalvikデバッグモニタ>エミュレータ>エミュレータ制御タブ>位置制御を選択します。

DDMS - Android_sdk/tools/ddms OR Android_sdk/tools/monitor

3
Dan

私は多くの点でadbを介してジオフィックスを設定しようとしていましたが、GPSデータを見ることができませんでした。しかし、DDMSを開いてアプリのプロセスを選択してエミュレータのコントロールタブから座標を送信しようとすると、すぐにうまくいきました。

3
James

Eclipseを使用していてEmulatorコントローラを使用している場合は、緯度と経度を手動で設定して、マップベースのアプリケーションをエミュレータで実行できます。

2
Swapnil

Android Studio(1.3)を使用している場合

  • メニューの「ツール」をクリック
  • "アンドロイド"
  • 「Androidデバイスモニター」
  • 現在のエミュレータをクリックしてください。
  • タブ "エミュレータコントロール"
  • "Location Controls"に行き、LatとLonを入力してください。
2
electrobabe

Alberto Gaonaの答えを1行にするだけです

token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n  geo fix 96.0290791 16.9041016  \n exit") - | nc localhost 5554

5554はadb devicesに表示されているエミュレータポート番号です。

adb emuが機能すればもっと良かったでしょう。

2
Kyaw Tun

エミュレータがGoogle APIなしでAndroidイメージを実行していたとき、エミュレータのGPS修正を取得できませんでした。画像をGoogle APIを含むように変更した直後に、GPS修正を機能させるための上記のすべての方法が行われました。

AVDを作成するときは、必ずGoogle APIを使用して画像を選択してください。

1
dvim

私自身のプロジェクトのために、私はAndroidエミュレータに模擬位置を提供できるオンラインサービスを開発しました。

Geo fixではなくgeo nmeaを使用して、緯度/経度だけでなく速度、コース、正確な時間などを設定できます。

このサービスには、nc(netcat)コマンドラインユーティリティが必要です。

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

1
Gerhard Wesp

シェルコマンド " geo fix ... "を使用するための、すでに述べた複数回の回答が正解です。しかし、データを取得するために LocationClient.getLastLocation() を使用する場合は、最初はうまくいかないことを言及する価値があります。 LocationClientクラスは、Google Playサービスを使用して座標を取得します。私にとってはこれはエミュレータマップアプリを一度実行した後に働き始めました。最初の起動時には、Googleアプリから自分の場所へのアクセスを許可するように求められますが、これはうまくいきます。

1
Maik

Android Studio用のプラグイン「Mock Location Plugin」があります。このプラグインを使って複数のポイントをエミュレートすることができます。あなたはこのリンクで使用の詳細なマニュアルを見つけることができます: Android Studio。 Mock Location Pluginで複数のGPSポイントをシミュレートします

1
Jesús Amieiro

あなたは genymotion のようなエミュレータを使うことができます。

1
Neil B

Android Studio - > [ツール]メニュー - > [Android] - > [Androidデバイスモニタ] - > [エミュレータ]タブ - >位置制御 - >必要な緯度と経度を設定し、必要に応じてプロジェクトをチェック

上記の解決策がうまくいかない場合。これを試して:

Android Manifest.xmlの中に、applicationタグの _ outside _ の2つのリンクを追加します。ただし、もちろん、manifestタグの内側に追加します。

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission Android:name="Android.permission.INTERNET" ></uses-permission>
1
ssgao

まだコメントできないので、@ ectomorphsを更新するとここに答えます。 Linuxでは/home/username/.emulator_console_auth_tokenの下にあります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random

FILE = open('/home/username/.emulator_console_auth_token', 'r')
AUTH_TOKEN = FILE.read()
FILE.close()

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("auth {0}\n".format(AUTH_TOKEN))
tn.read_until("OK", 5)

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

シェルスクリプトから、次のように座標を設定できます。

#!/usr/bin/env bash
export ATOKEN=`cat ~/.emulator_console_auth_token`
echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n"  | nc localhost 5554
0
draekko

Eclipseでは:

DDMSウィンドウを下にドラッグする必要があるかもしれません。 'Location Controls'は 'Telephony Actions'の下にあり、通常の大きさのコンソールビューによって隠されているかもしれません(コンソール付きのバー、LogCatなどがそれを覆っているかもしれません!)

0
Droid Teahouse

私は前の答えの1つに似た小さなスクリプトを作成しましたが、expectの代わりにpythonを使用します - それは少し簡単なので(expectはこのために発明されました)。

#!/usr/bin/expect

set port [lindex $argv 0]
set lon [lindex $argv 1]
set lat [lindex $argv 2]

set timeout 1
spawn telnet localhost $port
expect_after eof { exit 0 }

## interact
expect OK

set fp [open "~/.emulator_console_auth_token" r]
if {[gets $fp line] != -1} {
  send "auth $line\r"
}

send "geo fix $lon $lat\r"
expect OK
send "exit\r"

使用例:sendloc 5554 2.35607 48.8263

0
BoD