4
は、ここに私が試したものです:Androidで正確かつ一貫して場所を模倣する方法は?
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = locationManager.getBestProvider(criteria, true);
locationManager.addTestProvider(provider, false, false, false, false, true, true, true, 0, Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled(provider, true);
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
Location location = new Location(provider);
location.setLatitude(...);
location.setLongitude(...);
location.setAccuracy(Criteria.ACCURACY_FINE);
location.setTime(System.currentTimeMillis());
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
locationManager.setTestProviderLocation(provider, location);
handler.postDelayed(this, INTERVAL);
}
};
handler.postDelayed(runnable, INTERVAL);
問題は関係なく、私は間隔を設定する方法低い、ではない、Googleマップ上のマーカーは、嘲笑の場所にとどまるように見えることはできません。 Runnable
のrun()
が再び呼び出されるまで、常に元の位置に戻ります。私は、私のループハンドラよりも場所を模索する正当な方法があると信じています。あなたはそれがこのプロバイダの現在位置を設定します
locationManager.setTestProviderLocation(provider, location);
このラインを呼び出すと
Googleマップアプリで嘲笑された場所を見たいですか? – Blackkara
@Blackkaraいいえ、Googleマップ専用ではありません。私はちょうど私が正しく模倣された場所を設定したかどうかをテストするためにGoogleマップ上のマーカーを使用しています。 –
尋ねる理由:Google Mapsアプリケーション自体の位置を嘲笑して見たい場合は、融合ロケーションプロバイダをモックする必要があります。とにかく、あなたのコードは正しいですが、あなたが更新を要求しているプロバイダを確認してください。テストプロバイダの名前が「XYXプロバイダ」の場合、** requestLocationUpdates( "XYX provider"、...); ** – Blackkara