488

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

誰かがこれを達成する方法を教えてもらえますか?

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

4

35 に答える 35

458

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

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

telnet localhost 5554

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

コンソールで実行する特定のコマンドは次のとおりです。

geo fix <longitude value> <latitude value>

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

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

于 2010-02-17T10:24:36.137 に答える
195

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

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

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

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

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

Android Studioバージョン:2.3.3

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

  1. グーグルマップに行き、場所を選び、そして「方向」を押して、2番目の場所を入力してください。
  2. ルートが作成されたら、ブラウザからリンクをコピーします
  3. 次のWebサイトにアクセスします:https ://mapstogpx.comそして「Let'sGo」ボックスへのリンクを貼り付けます
  4. 「Let'sGo」ボタンを押すと、GPXファイルがダウンロードされます

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

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

于 2017-07-14T09:00:38.667 に答える
117

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

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

android-gps-emulator

うまくいけば、この難しさや質問に間違いなく遭遇する他の人を助けるのに役立つかもしれません。

于 2010-10-15T01:04:30.383 に答える
81

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

于 2012-01-23T03:15:33.177 に答える
33

Android Studioユーザーの場合:

エミュレータを実行し、

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

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

于 2015-02-23T18:26:07.657 に答える
14

マップビューを設定して実行していると仮定します。

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からエミュレーターに模擬座標を送信するには、「ウィンドウ」メニューに移動し、「ビューの表示」>「その他」>「エミュレーター制御」を選択すると、表示されるエミュレーター制御ペインから座標を送信できます。

于 2010-02-17T10:01:22.240 に答える
14

1.AndroidStudioユーザー。

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

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

2.Eclipseユーザー。

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

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

下部にロケーションコントロールパネルが表示されます。「手動」タブを選択します。

テキストボックスに経度と緯度を入力し、[送信]ボタンをクリックします。位置をエミュレータとアプリケーションに送信します。

3.telnetを使用します。

runコマンドでthisと入力します。

telnet localhost 5554

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

telnetに接続した後、次のコマンドを使用して位置をエミュレータに送信します。

geo fix long lat    
geo fix -121.45356 46.51119 4392

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

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

android-gps-emulator

于 2012-11-06T10:43:05.343 に答える
14

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

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

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

于 2016-05-02T10:30:14.720 に答える
13

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

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

于 2019-10-27T19:50:19.913 に答える
10

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

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

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

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

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

  3. 位置データを送信します。*固定ジオロケーションを送信するには、ジオフィックスを使用します。

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

    geo fix -121.45356 46.51119 4392
    
于 2011-04-12T07:58:57.183 に答える
10

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

adb emu geo fix [longtitude] [latitude]
于 2016-10-26T05:20:05.437 に答える
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()
于 2015-07-15T14:12:48.783 に答える
6

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

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

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

于 2015-06-03T20:57:49.737 に答える
5

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

于 2013-06-17T09:39:29.417 に答える
5

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

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
于 2013-12-17T08:07:57.267 に答える
4

ユーザーの場所の取得を参照してください

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

于 2012-03-15T20:46:09.423 に答える
4

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

于 2012-12-13T07:00:45.060 に答える
3

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

于 2010-08-08T12:38:10.030 に答える
3

Dalvik DebugMonitor>[エミュレーター]>[エミュレーター制御]タブ>[ロケーション制御]を選択します。

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

于 2012-12-11T18:13:43.900 に答える
2

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

于 2014-01-27T16:44:27.677 に答える
2

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

  • メニュー「ツール」をクリックします
  • "アンドロイド"
  • 「Androidデバイスモニター」
  • 現在のエミュレータをクリックします
  • タブ「エミュレータ制御」
  • 「ロケーションコントロール」に移動し、LatとLonを入力します
于 2015-08-06T12:47:54.917 に答える
2

アルベルトガオナの答えを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仕事ができたらもっと良かったでしょう。

于 2017-01-26T04:06:22.273 に答える
2

NecroPostについては申し訳ありませんが、この質問に関するいくつかの提案に従った後、私は自分の場所をアラスカに設定しました。しかし、私のデバイスはまだカリフォルニアのマウンテンビュー(Googleの本社?)にあることを示していました。だからこれが私が修正した方法です:

1)場所の設定に移動します。

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

2)テスト場所を設定します。アラスカを選びました。

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

3)グーグル「私の現在地」と写真で丸で囲んだ地図をクリックしてください。 場所をアラスカに設定しても、仮想デバイスはカリフォルニアのマウンテンビューにあると見なしていることに注意してください。

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

4)この場所のアイコンをクリックします。これ で、デバイスの場所が更新されます。もう一度「現在地」をグーグルで確認できます。

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

誰かがこれと同じ問題を経験した場合、私の解決策があなたに役立つことを願っています。

于 2021-11-24T17:44:42.727 に答える
1

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

android Manifest.xml内に、アプリケーションタグの外側に次の2つのリンクを追加します、もちろんマニフェストタグの内側に追加します

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
于 2012-10-08T04:03:05.803 に答える
1

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

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

于 2012-10-17T05:10:37.510 に答える
1

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

于 2013-10-24T07:25:21.270 に答える
1

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

geofixではなくgeonmeaを使用しているため、緯度/経度だけでなく、速度、コース、正確な時間などを設定できます。

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

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

于 2015-03-01T23:08:38.493 に答える
1

genymotionのようなエミュレーターを使用すると、現在のGPS位置などを柔軟にエミュレートできます。

于 2016-06-06T11:43:00.737 に答える
1

「モックロケーションプラグイン」と呼ばれるAndroidStudio用のプラグインがあります。このプラグインを使用して、複数のポイントをエミュレートできます。詳細な使用マニュアルは、AndroidStudioのリンクにあります。モックロケーションプラグインで複数のGPSポイントをシミュレートする

于 2016-07-18T07:28:42.733 に答える
1

まだコメントできないので、@ ectomorphsの回答を更新すると、ここで回答が得られます。これは、telnetingの際に認証トークンが必要になります。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()

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

#!/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
于 2016-10-11T14:06:50.057 に答える
1

AndroidStudio->[ツール]メニュー->[Android]->[Androidデバイスモニター]->[エミュレーター]タブ->[ロケーションコントロール]->必要な緯度と経度を設定し、必要に応じてプロジェクトを確認します

于 2017-11-07T10:33:50.507 に答える
1

Extended controlsエミュレートに移動します。その後、マップを検索するか、設定する場所にドラッグすることで、エミュレートする場所を設定できます。

位置

最後にSET LOCATIONボタンをクリックして保存します。

于 2021-06-07T11:31:05.870 に答える
0

日食で:

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

于 2015-01-06T08:35:18.377 に答える
0

以前の回答の1つに似た小さなスクリプトを作成しましたが、少し単純なため、-expectの代わりに使用しています(このために考案されました)。pythonexpect

#!/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

于 2017-08-21T13:27:30.037 に答える
0

Android Studio 3.5.1でも同じ問題が発生しました。Androidエミュレーターの右側にある3つのドットをクリックし、[場所]タブを選択すると、送信オプションが表示されません。ロケーションポイントを設定しようとしましたが、デフォルトのクパチーノのロケーションは変更されませんでした。グーグルマップを開くと、それはあなたを自動配置し、あなたのクパチーノの場所が変わります。

于 2019-11-10T17:51:49.407 に答える