AndroidエミュレータでGPS位置をエミュレートするにはどうすればよいですか?


444

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

これを達成する方法を教えてくれる人はいますか?

エミュレータの場所をテスト位置に設定するにはどうすればよいですか?


あなたがGenymotionを使用している場合:stackoverflow.com/questions/30709329/...
HachemさんBenyahia

Playストアには、多数のモックロケーションアプリの1つをインストールできます。
whoKnows

回答:


443

Telnet経由でエミュレータに接続できます。次に、地理的修正やネットワークなどの特定のデータを入力できるエミュレータコンソールがあります。

ここでは、コンソールの使用方法について詳しく説明しています。コンソールに接続するには、コマンドラインを開いて次のように入力します。

telnet localhost 5554

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

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

geo fix <longitude value> <latitude value>

このサイトは現実的なlat / lngを見つけるのに役立ちました:http : //itouchmap.com/latlong.html

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


13
geo fixを使用して、偽の緯度と経度も設定しましたが、依然としてnullの場所を取得しています。
UMAR

2
または簡単な方法で、エミュレータでgpsをオンにして、エミュレータコントロールに移動し、ダミーの緯度と経度の値を指定して、それらの値をエミュレータのgpsの場所として取得します。
UMAR 2011年

35
adb emu geo修正30.219470 -97.745361
Bryan Rehbein 2013

12
順序を気にしてください、lat before lat!
クリストフ

14
このgeo fixコマンドは、auth最初に使用した場合にのみ使用できます。言及する価値があるかもしれません...
2016

126

エミュレータ自体の組み込みソリューションについては、ここでは誰も触れていないので、将来の訪問者のために、ビジュアルと共有したいと思います。

まず、Androidエミュレーターを実行し、以下に示すメニューボタン(3つのドット)をクリックします。

メニューボタン付きエミュレータ

次に、左側のペインから[ 場所]を選択し、必要に応じて座標を変更します。押した後送信ボタンを、変更がすぐに(私はより良く理解するためにGoogleマップを開くことをお勧めします)有効になります。

ここに画像の説明を入力してください

Android Studioバージョン:2.3.3

さらに、さまざまな場所をリアルタイムでアプリケーションにアクセスさせるために、GPXファイルを使用できます。このファイルは、Googleマップの方向リンクから簡単に作成できます。

  1. グーグルマップに移動し、場所を選択してから、「道順」を押して2番目の場所を入力してください。
  2. ルートが作成されたら、ブラウザからリンクをコピーします
  3. このウェブサイトにアクセスしてくださいhttps : //mapstogpx.com、「Let's Go」ボックスへのリンクを貼り付けます
  4. 「レッツゴー」ボタンを押すとG​​PXファイルがダウンロードされます

[GPS / KMLの読み込み]ボタンを使用して、作成したファイルをエミュレータに読み込み、速度を選択して、下部にある緑色の再生ボタンを押します。下の画像に示すように、場所はリアルタイムで送信されます。

ここに画像の説明を入力してください


このソリューションでは、エミュレータでの再生サービスが必要ですか?
Kevan Aghera

私はそうは思いません。
エデン

エミュレータgoogle api client nullでアプリを開くと、エミュレータでマップを読み込めません。そして、そこにあるモバイルデバイスは私にとっては大丈夫です。
Kevan Aghera

4
これを行うためにGoogleアカウントにログインする必要がないことを確認しました。涼しい!
xarlymg89

3
新しい場所を認識させるために、エミュレートされたOSを再起動する必要がありました。
Nate Whittaker

109

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

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

android-gps-emulator

うまくいけば、これが間違いなくこの難易度/質問に遭遇する他の人を助けるのに役立つこともあります。


わぁ、ありがとう!セットアップはうまくいきましたが、エミュレータへの接続を管理できませんでした->ログはjava.net.ConnectionRefusedを出力します。その後、(ターミナルから)telnet localhost 5554を試してみましたが、動作しました。他にMacでエミュレータをテストした人はいますか?
ottel142 2013

1
私はそれをテストしませんでした、しかしこれはとてもすごく見えるので私はグーグルがそれについて世界に伝えるべきだと思います。シンプルなアイデアは常に最高です。なぜ誰もこれを考えなかったのですか?
tiktak 2014年

@ ottel142-はい、私は実際にはその問題なしにMacで実行しています(MavericksでChromeを使用)。ConnectionRefusedAndroid仮想デバイスを起動する前にGPSエミュレーターを起動すると、そのメッセージが表示されます。ブラウザの上部には、「ポート5554で接続を作成中にエラーが発生しました...」と表示されます。[エミュレータポートの変更]ボタンをクリックして再接続すると、
すべて正常に動作し

まさに私が必要としたもの。
デビッド

これは良いプログラムですが、システムの場所によってフロートの動作が変わります。私のシステムではgeo fix 42,42 42,42 42、ドットではなくコンマのようにする必要があります。
nurettin 2016年

81

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


8
これは私が見た中で最も簡単な方法です。GPSをサポートするAVDをセットアップしていることを確認してから、DDMSパースペクティブで[デバイス]の下で実行されているエミュレーターをクリックし、中央右ペインの[エミュレーターコントロール]タブを選択します。下部にある[ロケーションコントロール]セクションでSteveCav( Eclipse Juno 4.2 for Java Developers for the latest ADT)。位置情報コントロールパネルには、位置情報があらかじめ読み込まれていました。
Steven Magana-Zook

すばらしい答えです!ddmsがsdk(yoursdkfolder / tools /)の一部であるため、任意のIDEで動作します
Zarokka

1
これも、上記のtelnetソリューションも私にとってはうまくいきませんでした。私はこのように私の場所を取得しようとしていますが、それでもnullです。 LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb 14

DDMSで「ロケーションコントロール」を使用すると、送信しようとすると次のエラーが発生しますUnable to send command to the emulator。それが機能しない理由は何ですか?デフォルトのNexus 4 AVDを使用しています
emersonthis 2014

1
私はグレー表示されているこの場所のコントロールを行うことができません
UTSAVグプタ

33

Android Studioユーザーの場合:

エミュレータを実行し、

次に、 Tools -> Android ->Android device monitor

Emulator Controlタブを開き、場所コントロールグループを使用します。


私の場合、すべてのフィールドは編集できません。アイデアはありますか?
Olkunmustafa 2016年

4
@MustafaOlkunエミュレータ自体がそれらのコントロールを持っていることを意味します。エミュレータの横にある「...」を探します。
ジャスティン

3
私は同じ問題を抱えています。これらは編集できません。はい、「...」があります。しかし、私はそこに何もして送信、アプリケーション上で何も変化....置くとき
KansaiRobot

14

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からエミュレータにモック座標を送信するには、[ウィンドウ]メニューに移動し、[ビューの表示]> [その他]> [エミュレータコントロール]を選択します。表示されるエミュレータコントロールペインから座標を送信できます。


3
しかし私の友人は経度と緯度はどこですか?
UMAR

1
私はこれを使用してエミュレーター制御にモック値を送信しようとしましたが、送信ボタンを押しても何も実行されず、値が送信されたかどうかを確認するメッセージが表示されません。seocndthing GeoPoint g = myLocation.getMyLocation(); null値を返しています。
UMAR 2010

あなたはそれをあなたが使っているのrunOnFirstFixですか?これは、デバイスが最初にGPS位置を受信したときに発生するイベントであるため、発生した場合getMyLocationは必ず値を返す必要があります。
David Hedlund、2010


13

1. Android Studioユーザー。

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

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

2. Eclipseユーザー。

最初にEclipseのメニューで[ウィンドウ]、[パースペクティブを開く]、[DDMS]の順に選択します。つまり、ウィンドウ->プレスペクティブを開く-> DDMS。

左側のデバイスパネルと右側にさまざまなタブが表示されます。「エミュレータ制御」タブを選択します。

下部に位置制御パネルが表示されます。「手動」タブを選択します。

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

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


この最初のオプションは、小さな変更が1つあるだけでうまくいきました。EclipseからDDMSウィンドウを開くことができませんでした。空白の灰色のページが表示されました。しかし、エミュレーターを実行しているときに、コマンドプロンプト(C:\ Program Files \ Android \ android-sdk \ tools \ ddms)からDDMSを開いた場合、左側のデバイスで説明したウィンドウと「エミュレーターコントロール右側のタブ。ありがとう!
Eric Barr

10

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

コマンドラインからモック位置データを送信するには:

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

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

    telnet localhost 5555 (エミュレーターが実行されているポートに5555を置き換えます)

  3. 位置データを送信します:*地理位置情報を送信するには、地理位置情報を修正します。

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

    geo fix -121.45356 46.51119 4392

8

私はtelnetを介してgpsの場所をエミュレーターにプッシュするpythonスクリプトを作成しました。ソースと宛先の場所を定義します。座標がデバイスにプッシュされる時間を制御できる時間オフセットもあります。1つの場所が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()

魅力的な作品!共有いただきありがとうございます。
Alberto Gaona

うーん。少しエラーがあると思います。地理修正メッセージが経度と緯度の順序で取得することを知っている限り、それらを逆に送信しています。上記の回答を参照してください。
Alberto Gaona

機能していません。エミュレータはポートで待機していますが、何も受信していません。
Durga Swaroop 2016

5

EclipseプラグDDMS機能を使用してGPSを送信します。 ここに画像の説明を入力してください


5

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

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

5

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

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

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


5554を現在のエミュレーター待機ポートに調整する必要がある場合があります。
Alberto Gaona

5

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

adb emu geo fix [longtitude] [latitude]

5

最後に、Android Studio 4の最新リリースと彼の新しいエミュレータアップデート2019年10月23日を使用すると、より簡単になります。エミュレーターを起動して、エミュレーターのパラメーターに移動します...> [ルート]タブで、マップ上の2つのポイントを選択して開始/終了し、1000 km / hを超える調整可能な再生速度で新しいルートを開始できます。

ここに画像の説明を入力してください



4

最初に、EclipseのDDMSセクションに移動します。エミュレーターのコントロールを開きます...手動セクションに移動し、緯度と経度を設定してから、送信ボタンを押します。


3

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


プロセスを指定する必要はありません...または、おそらく2010年のDDMSはそれを行う必要があります。

3

Dalvik Debug Monitor>エミュレーターを選択> Emulator Controlタブ> Location Controls。

DDMS-android_sdk / tools / ddmsまたはandroid_sdk / tools / monitor


2

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


2

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

  • メニュー「ツール」をクリックします
  • "アンドロイド"
  • 「Androidデバイスモニター」
  • 現在のエミュレータをクリックします
  • タブ「エミュレータ制御」
  • 「位置制御」に行き、緯度と経度を入力します

2

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


とても便利なワンライナー!私の場合、\ n:token = $(cat〜/ .emulator_console_auth_token);の間のスペースを削除する必要がありました。猫<(echo -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit")-| nc localhost 5554
ジェレミー

1

上記の解決策が機能しない場合。これを試して:

あなたのアンドロイドたManifest.xmlの内側には、以下の二つのリンクを追加しOUTSIDEアプリケーションタグのを、もちろんのマニフェストタグ内

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

1

エミュレーターがGoogle APIなしでAndroidイメージを実行しているときに、エミュレーターでGPS修正を取得できませんでした。画像をGoogle APIを含むように変更するとすぐに、ここで説明したGPS修正を取得する方法がすべて機能しました。

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


画像とはどういう意味ですか?また、AVDの作成中に、Google APIで画像を選択するにはどうすればよいですか?日食でAVDを作成している間は、そのようなオプションはありません。
user1911703 2015

Android SDK Managerを介してGoogle APIで画像をダウンロードしたことを確認してください。
dvim 2015

1

シェルコマンド「geo fix ...」を使用するための、すでに述べた複数回の回答が正解です。ただし、LocationClient.getLastLocation()を使用してデータを取得する場合は、最初は機能しないことを述べておきます。LocationClientクラスは、Google Playサービスを使用して座標を取得します。私にとって、これはエミュレータマップアプリを1回実行した後に機能し始めました。最初の起動時に、Googleアプリに現在地へのアクセスを許可するように求められますが、これでうまくいくと思います。


1

私自身のプロジェクトでは、Androidエミュレーターにシミュレートされた場所を提供できるオンラインサービスを開発しました。

緯度/経度だけでなく、速度、進路、正確な時刻などを設定できるgeo fixではなくgeo nmeaを使用します。

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

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




1

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


静的な位置の値(緯度と経度)を設定できます。どの位置をコーディングパーツで直接確認する必要がありますか?
Premkumar Manipillai 2017

0

日食では:

DDMSウィンドウを下にドラッグしなければならない場合があります。「ロケーションコントロール」は「テレフォニーアクション」の下にあり、通常のサイズのコンソールビューで非表示になっている場合があります(コンソールのバー、LogCatなどで覆われている場合があります)。


DDMS内でEmulator Controlの下に見つかりました。場所コントロールの下のタブ。
user914425
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.