回答:
Telnet経由でエミュレータに接続できます。次に、地理的修正やネットワークなどの特定のデータを入力できるエミュレータコンソールがあります。
ここでは、コンソールの使用方法について詳しく説明しています。コンソールに接続するには、コマンドラインを開いて次のように入力します。
telnet localhost 5554
次に、geoコマンドを使用して、緯度、経度、および必要に応じて、GPSロケーションプロバイダーを使用するすべてのプログラムに渡されるデバイスの高度を設定できます。詳細な手順については、上記のリンクを参照してください。
コンソールで実行する特定のコマンドは
geo fix <longitude value> <latitude value>
このサイトは現実的なlat / lngを見つけるのに役立ちました:http : //itouchmap.com/latlong.html
複数の座標が必要な場合は、ルートを含むkmlファイルを使用することもできます。これについては、この記事で少し説明します。現在、もっと良い情報源を見つけることができません。
geo fix
コマンドは、auth
最初に使用した場合にのみ使用できます。言及する価値があるかもしれません...
エミュレータ自体の組み込みソリューションについては、ここでは誰も触れていないので、将来の訪問者のために、ビジュアルと共有したいと思います。
まず、Androidエミュレーターを実行し、以下に示すメニューボタン(3つのドット)をクリックします。
次に、左側のペインから[ 場所]を選択し、必要に応じて座標を変更します。押した後送信ボタンを、変更がすぐに(私はより良く理解するためにGoogleマップを開くことをお勧めします)有効になります。
Android Studioバージョン:2.3.3
さらに、さまざまな場所をリアルタイムでアプリケーションにアクセスさせるために、GPXファイルを使用できます。このファイルは、Googleマップの方向リンクから簡単に作成できます。
[GPS / KMLの読み込み]ボタンを使用して、作成したファイルをエミュレータに読み込み、速度を選択して、下部にある緑色の再生ボタンを押します。下の画像に示すように、場所はリアルタイムで送信されます。
使用するよりもエミュレータのGPS座標を設定するより良い方法を探していました geo fix
特定の緯度と経度の座標して手動で決定する。
何も見つからないため、GWTとGoogle Maps APIを使用して、エミュレーターでGPS位置を設定するブラウザーベースのマップツールを起動する小さなプログラムをまとめました。
うまくいけば、これが間違いなくこの難易度/質問に遭遇する他の人を助けるのに役立つこともあります。
ConnectionRefused
Android仮想デバイスを起動する前にGPSエミュレーターを起動すると、そのメッセージが表示されます。ブラウザの上部には、「ポート5554で接続を作成中にエラーが発生しました...」と表示されます。[エミュレータポートの変更]ボタンをクリックして再接続すると、
geo fix 42,42 42,42 42
、ドットではなくコンマのようにする必要があります。
を使用している場合はEclipse
、に移動しWindow->Open Perspective->DDMS
、1 Location Controls
と入力してを押しますSend
。
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
。それが機能しない理由は何ですか?デフォルトのNexus 4 AVDを使用しています
Android Studioユーザーの場合:
エミュレータを実行し、
次に、 Tools -> Android ->Android device monitor
Emulator Control
タブを開き、場所コントロールグループを使用します。
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からエミュレータにモック座標を送信するには、[ウィンドウ]メニューに移動し、[ビューの表示]> [その他]> [エミュレータコントロール]を選択します。表示されるエミュレータコントロールペインから座標を送信できます。
runOnFirstFix
ですか?これは、デバイスが最初にGPS位置を受信したときに発生するイベントであるため、発生した場合getMyLocation
は必ず値を返す必要があります。
新しいエミュレータの場合:
http://developer.android.com/tools/devices/emulator.html#extended
基本的に、エミュレーターコントロール(エミュレーターの右側)の3つのドットボタンをクリックすると、場所を含むエミュレーターを制御できるメニューが開きます。
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位置を設定するプログラムがあります。
エミュレータコンソールで「geo」コマンドを使用する
コマンドラインからモック位置データを送信するには:
Androidエミュレータでアプリケーションを起動し、SDKの/ toolsディレクトリにあるterminal / consoleを開きます。
エミュレータコンソールに接続します。
telnet localhost 5555
(エミュレーターが実行されているポートに5555を置き換えます)
位置データを送信します:*地理位置情報を送信するには、地理位置情報を修正します。
このコマンドは、経度と緯度を10進度で受け入れ、オプションで高度をメートルで受け入れます。例えば:
geo fix -121.45356 46.51119 4392
私は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に興味がなければ、これで十分です。
最後に、Android Studio 4の最新リリースと彼の新しいエミュレータアップデート2019年10月23日を使用すると、より簡単になります。エミュレーターを起動して、エミュレーターのパラメーターに移動します...> [ルート]タブで、マップ上の2つのポイントを選択して開始/終了し、1000 km / hを超える調整可能な再生速度で新しいルートを開始できます。
ユーザーの場所の取得を参照してください
モック位置データの提供をご覧ください。あなたはそれのための解決策を見つけるでしょう。
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
。
エミュレーターがGoogle APIなしでAndroidイメージを実行しているときに、エミュレーターでGPS修正を取得できませんでした。画像をGoogle APIを含むように変更するとすぐに、ここで説明したGPS修正を取得する方法がすべて機能しました。
AVDを作成するときは、必ずGoogle APIで画像を選択してください。
私自身のプロジェクトでは、Androidエミュレーターにシミュレートされた場所を提供できるオンラインサービスを開発しました。
緯度/経度だけでなく、速度、進路、正確な時刻などを設定できるgeo fixではなくgeo nmeaを使用します。
このサービスには、nc(netcat)コマンドラインユーティリティのみが必要です。
現在のGPS位置などをエミュレートする柔軟性を提供するgenymotionなどのエミュレータを使用できます。
「モックロケーションプラグイン」と呼ばれるAndroid Studioのプラグインがあります。このプラグインで複数のポイントをエミュレートできます。このリンクで使用の詳細なマニュアルを見つけることができます:Android Studio。Mock Location Pluginで複数のGPSポイントをシミュレート
Androidスタジオを開きます-> [ツール]メニュー-> [Android]-> [Androidデバイスモニター]-> [エミュレータ]タブ-> [位置制御]->必要な緯度と経度を設定し、必要に応じてプロジェクトを確認します
日食では:
DDMSウィンドウを下にドラッグしなければならない場合があります。「ロケーションコントロール」は「テレフォニーアクション」の下にあり、通常のサイズのコンソールビューで非表示になっている場合があります(コンソールのバー、LogCatなどで覆われている場合があります)。
〜