テスト用にAndroidエミュレータで経度と緯度を取得したい。
誰かがこれを達成する方法を教えてもらえますか?
エミュレータの場所をテスト位置に設定するにはどうすればよいですか?
テスト用にAndroidエミュレータで経度と緯度を取得したい。
誰かがこれを達成する方法を教えてもらえますか?
エミュレータの場所をテスト位置に設定するにはどうすればよいですか?
Telnet経由でエミュレータに接続できます。次に、地理的修正、ネットワークなどの特定のデータを入力できるエミュレーターコンソールができます。
ここでは、コンソールの使用方法について詳しく説明しています。コンソールに接続するには、コマンドラインを開いて次のように入力します
telnet localhost 5554
次に、geoコマンドを使用して、gpsロケーションプロバイダーを使用してすべてのプログラムに渡されるデバイスの緯度、経度、および必要に応じて高度を設定できます。詳細な手順については、上記のリンクを参照してください。
コンソールで実行する特定のコマンドは次のとおりです。
geo fix <longitude value> <latitude value>
私はこのサイトが現実的なlat/lngを見つけるのに役立つと思いました:http://itouchmap.com/latlong.html
複数の座標が必要な場合は、ルートを含むkmlファイルを使用することもできます。これについては、この記事で少し説明します。現在、より良い情報源を見つけることができません。
ここではエミュレータ自体の組み込みソリューションについては誰も言及していなかったので、将来の訪問者のために、ビジュアルと共有したいと思います。
まず、Android Emulatorを実行し、以下に示すメニューボタン(3つのドット)をクリックします。
次に、左側のペインから[場所]を選択し、必要に応じて座標を変更します。[送信]ボタンを押すと、変更がすぐに有効になります(理解を深めるために、Googleマップを開くことをお勧めします)。
Android Studioバージョン:2.3.3
さらに、さまざまな場所をリアルタイムでアプリケーションに送信するために、GPXファイルを使用できます。Googleマップの方向リンクからこのファイルを作成するのは非常に簡単です:
[GPS / KMLの読み込み]ボタンを使用して、作成したファイルをエミュレータに読み込み、速度を選択して、下部にある緑色の再生ボタンを押します。下の写真に示すように、場所はリアルタイムで送信されます。
geo fix
特定の緯度と経度の座標を使用して手動で決定するよりも、エミュレータのGPS座標を設定するためのより良い方法を探していました。
何も見つかりませんでした。GWTとGoogleMapsAPIを使用してブラウザベースのマップツールを起動し、エミュレータでGPSの位置を設定する小さなプログラムをまとめました。
うまくいけば、この難しさや質問に間違いなく遭遇する他の人を助けるのに役立つかもしれません。
を使用している場合はEclipse
、に移動しWindow->Open Perspective->DDMS
、1つ入力して、をLocation Controls
押しますSend
。
Android Studioユーザーの場合:
エミュレータを実行し、
次に、Tools -> Android ->Android device monitor
Emulator Control
タブを開き、ロケーションコントロールグループを使用します。
マップビューを設定して実行していると仮定します。
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からエミュレーターに模擬座標を送信するには、「ウィンドウ」メニューに移動し、「ビューの表示」>「その他」>「エミュレーター制御」を選択すると、表示されるエミュレーター制御ペインから座標を送信できます。
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位置を設定するプログラムがあります。
新しいエミュレーターの場合:
http://developer.android.com/tools/devices/emulator.html#extended
基本的に、エミュレーターコントロール(エミュレーターの右側)の3つのドットボタンをクリックすると、場所を含むエミュレーターを制御できるメニューが開きます。
エミュレータコンソールで「geo」コマンドを使用する
コマンドラインから模擬位置データを送信するには:
Androidエミュレーターでアプリケーションを起動し、SDKの/toolsディレクトリにあるターミナル/コンソールを開きます。
エミュレータコンソールに接続します。
telnet localhost 5555
(5555を、エミュレーターが実行されているポートに置き換えます)
位置データを送信します。*固定ジオロケーションを送信するには、ジオフィックスを使用します。
このコマンドは、経度と緯度を10進角で、オプションの高度をメートルで受け入れます。例えば:
geo fix -121.45356 46.51119 4392
次の解決策が私のために働いた-コマンドラインを開いて書く:
adb emu geo fix [longtitude] [latitude]
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()
Mac、Linux、またはCygwinの場合:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
それはあなたをメキシコシティに置くでしょう。それに応じて経度/緯度/高度を変更します。nmeaに興味がない場合は、これで十分です。
EclipseプラグDDMS機能を使用してGPSを送信します。
通信ポートがブロックされているLinuxの場合。ターミナルを内部のplatform-toolsフォルダーに移動し、次のandroid sdk
コマンドを実行します。
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
ユーザーの場所の取得を参照してください
模擬位置データの提供の下を見てください。あなたはそれに対する解決策を見つけるでしょう。
まず、EclipseのDDMSセクションに移動します。エミュレーターのコントロールを開くよりも....手動セクションに移動し、緯度と経度を設定してから、送信ボタンを押します。
多くのポイントでadbを介して地理的修正を設定しようとしましたが、アプリにGPSデータを表示させることができませんでした。しかし、DDMSを開いてアプリのプロセスを選択し、エミュレーターの[コントロール]タブから座標を送信しようとすると、すぐに機能しました。
Dalvik DebugMonitor>[エミュレーター]>[エミュレーター制御]タブ>[ロケーション制御]を選択します。
DDMS-android_sdk / tools/ddmsまたはandroid_sdk/tools / monitor
Eclipseを使用している場合は、エミュレーターコントローラーを使用して、緯度と経度を手動で設定し、エミュレーターでマップベースのアプリを実行できます。
Android Studio(1.3)を使用している場合:
アルベルトガオナの答えを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
仕事ができたらもっと良かったでしょう。
NecroPostについては申し訳ありませんが、この質問に関するいくつかの提案に従った後、私は自分の場所をアラスカに設定しました。しかし、私のデバイスはまだカリフォルニアのマウンテンビュー(Googleの本社?)にあることを示していました。だからこれが私が修正した方法です:
1)場所の設定に移動します。
2)テスト場所を設定します。アラスカを選びました。
3)グーグル「私の現在地」と写真で丸で囲んだ地図をクリックしてください。 場所をアラスカに設定しても、仮想デバイスはカリフォルニアのマウンテンビューにあると見なしていることに注意してください。
4)この場所のアイコンをクリックします。これ で、デバイスの場所が更新されます。もう一度「現在地」をグーグルで確認できます。
誰かがこれと同じ問題を経験した場合、私の解決策があなたに役立つことを願っています。
上記の解決策が機能しない場合。これを試して:
android Manifest.xml内に、アプリケーションタグの外側に次の2つのリンクを追加しますが、もちろんマニフェストタグの内側に追加します
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
エミュレーターがGoogleAPIなしでAndroidイメージを実行しているときに、エミュレーターでGPS修正を取得できませんでした。Google APIを含むように画像を変更するとすぐに、ここで説明したGPS修正を機能させる方法がすべて実行されます。
AVDを作成するときは、必ずGoogleAPIを使用して画像を選択してください。
シェルコマンド「geofix...」を使用するためのすでに述べた複数回の答えが正解です。ただし、LocationClient.getLastLocation()を使用してデータを取得する場合は、最初は機能しないことに注意してください。LocationClientクラスは、GooglePlayサービスを使用して座標を取得します。私にとって、これはエミュレーターマップアプリを一度実行した後に機能し始めました。最初の起動時に、Googleアプリに現在地へのアクセスを許可するように求められます。これでうまくいくと思います。
私自身のプロジェクトのために、Androidエミュレーターにシミュレートされた位置を提供できるオンラインサービスを開発しました。
geofixではなくgeonmeaを使用しているため、緯度/経度だけでなく、速度、コース、正確な時間などを設定できます。
このサービスには、nc(netcat)コマンドラインユーティリティのみが必要です。
genymotionのようなエミュレーターを使用すると、現在のGPS位置などを柔軟にエミュレートできます。
「モックロケーションプラグイン」と呼ばれるAndroidStudio用のプラグインがあります。このプラグインを使用して、複数のポイントをエミュレートできます。詳細な使用マニュアルは、AndroidStudioのリンクにあります。モックロケーションプラグインで複数のGPSポイントをシミュレートする
まだコメントできないので、@ 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
日食で:
DDMSウィンドウを下にドラッグする必要がある場合があります。「ロケーションコントロール」は「テレフォニーアクション」の下にあり、通常のサイズのコンソールビューによって非表示になっている可能性があります(コンソール付きのバー、LogCatなどがそれを覆っている可能性があります)。
〜
以前の回答の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
Android Studio 3.5.1でも同じ問題が発生しました。Androidエミュレーターの右側にある3つのドットをクリックし、[場所]タブを選択すると、送信オプションが表示されません。ロケーションポイントを設定しようとしましたが、デフォルトのクパチーノのロケーションは変更されませんでした。グーグルマップを開くと、それはあなたを自動配置し、あなたのクパチーノの場所が変わります。