Как я могу заставить провайдера фиктивного местоположения работать - PullRequest
1 голос
/ 28 апреля 2019

Мне нужно создать тестовое приложение, которое может макетировать местоположение. При нажатии кнопки значения широты и долготы, представленные в текстовом поле, должны быть установлены в качестве фиктивного местоположения. Я пытаюсь построить это, используя простой способ, используя 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)

Есть ли способ это исправить?

Спасибо, Радж

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...