Мне нужно создать тестовое приложение, которое может макетировать местоположение. При нажатии кнопки значения широты и долготы, представленные в текстовом поле, должны быть установлены в качестве фиктивного местоположения. Я пытаюсь построить это, используя простой способ, используя API-интерфейсы провайдера слияния
Location mockLocation = new Location("flp");
mockLocation.setLatitude(12);
mockLocation.setLongitude(82);
mockLocation.setAccuracy(1.0f);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}
mockLocation.setTime(new Date().getTime());
Criteria criteria = new Criteria();
criteria.setAccuracy( Criteria.ACCURACY_FINE );
String provider = locationManager.getBestProvider( criteria, true );
if ( provider == null ) {
Log.e( "", "No location provider found!" );
return;
}
// provider and LocationManager.GPS_PROVIDER are same - "gps"
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation); // --> I am getting exception here
Я дал все возможные разрешения в файле манифеста:
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ALLOW_MOCK_LOCATIONS
ACCESS_MOCK_LOCATION
Также в настройках вручную включены параметры разработчика, разрешения приложений и приложение провайдера макета местоположения.
Я получаю, за исключением setTestProviderLocation:
java.lang.IllegalStateException: не удалось выполнить метод для
Android: onClick на
androidx.appcompat.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:390)
на android.view.View.performClick (View.java:6266) на
android.view.View $ PerformClick.run (View.java:24730) в
android.os.Handler.handleCallback (Handler.java:793) в
android.os.Handler.dispatchMessage (Handler.java:98) в
android.os.Looper.loop (Looper.java:173) в
android.app.ActivityThread.main (ActivityThread.java:6698) в
java.lang.reflect.Method.invoke (родной метод) в
com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:782) вызвано
автор: java.lang.reflect.InvocationTargetException at
java.lang.reflect.Method.invoke (родной метод) в
androidx.appcompat.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:385)
... еще 9 причин: java.lang.IllegalArgumentException: поставщик
"gps" неизвестно в android.os.Parcel.readException (Parcel.java:1955) в
android.os.Parcel.readException (Parcel.java:1897) в
android.location.ILocationManager $ Заглушка $ Proxy.setTestProviderLocation (ILocationManager.java:1340)
в
android.location.LocationManager.setTestProviderLocation (LocationManager.java:1305)
Есть ли способ это исправить?
Спасибо,
Радж