以下のコードを使用して、場所の権限を必要とせずにモックの場所を設定します。
ただし、コードは、FusedLocationProviderClient
. 意図したとおりに機能することもあれば、場所が前後にジャンプし続けることもあれば、まったく機能しないこともあります。エラーでクラッシュすることもよくありますjava.lang.IllegalArgumentException: Provider “gps” already exists
。基本的に、これは悪いコードであり、アプリで削除したいと考えています。
私が探しているのは、このFake GPS appとまったく同じように、デバイスの場所を (場所の許可を必要とせずに) 偽造できる完全なソリューションです。そのアプリを Java で再作成したいと考えています。2020 年 5 月の時点で完全に機能するものはオンラインで見つかりませんでした。
void setMockLocation() {
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
mockLocation.setLatitude(-33.852); // Sydney
mockLocation.setLongitude(151.211);
mockLocation.setAltitude(10);
mockLocation.setAccuracy(5);
mockLocation.setTime(System.currentTimeMillis());
mockLocation.setElapsedRealtimeNanos(System.nanoTime());
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}