我如何使模拟位置提供程序起作用

问题描述 投票:1回答:1

我需要创建一个可以模拟位置的测试应用程序。单击按钮时,需要将文本框中提供的纬度和经度值设置为模拟位置。我正在尝试使用融合的位置提供程序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 atandroidx.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在java.lang.reflect.Method.invoke(本机方法)位于androidx.appcompat.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)... 9更多原因:java.lang.IllegalArgumentException:提供者android.os.Parcel.readException(Parcel.java:1955)处的“ gps”未知android.os.Parcel.readException(Parcel.java:1897)在android.location.ILocationManager $存根$ Proxy.setTestProviderLocation(ILocationManager.java:1340)在android.location.LocationManager.setTestProviderLocation(LocationManager.java:1305)

任何解决此问题的方法?

感谢,拉吉

我需要创建一个可以模拟位置的测试应用程序。单击按钮时,需要将文本框中提供的纬度和经度值设置为模拟位置。我正在尝试...

android location mock-location
1个回答
0
投票

由于Android 10

© www.soinside.com 2019 - 2024. All rights reserved.