Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使模拟位置提供程序工作_Android_Location_Mock Location - Fatal编程技术网

Android 如何使模拟位置提供程序工作

Android 如何使模拟位置提供程序工作,android,location,mock-location,Android,Location,Mock Location,我需要创建一个可以模拟位置的测试应用程序。单击按钮时,需要将文本框中提供的纬度和经度值设置为模拟位置。我正在尝试使用融合位置提供者API的简单方法来构建它 Location mockLocation = new Location("flp"); mockLocation.setLatitude(12); mockLocation.setLongitude(82); mockLocation.setAccuracy(1.0f); if (Build.VERSION.SDK_INT >= Bu

我需要创建一个可以模拟位置的测试应用程序。单击按钮时,需要将文本框中提供的纬度和经度值设置为模拟位置。我正在尝试使用融合位置提供者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
还可以在“设置”中手动启用开发人员选项、应用程序权限和模拟位置提供程序应用程序

我在SettProviderLocation上得到的信息除外:

java.lang.IllegalStateException:无法执行的方法 安卓:点击 androidx.appcompat.app.AppCompativeInflater$DeclaredOnClickListener.onClick(appCompativeInflater.java:390) 在android.view.view.performClick(view.java:6266)中 查看$PerformClick.run(view.java:24730) handleCallback(Handler.java:793)位于 dispatchMessage(Handler.java:98)位于 Looper.loop(Looper.java:173)位于 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)上 by:java.lang.reflect.InvocationTargetException位于 java.lang.reflect.Method.invoke(本机方法)位于 androidx.appcompat.app.AppCompativeInflater$DeclaredOnClickListener.onClick(appCompativeInflater.java:385) ... 9更多原因:java.lang.IllegalArgumentException:Provider android.os.Parcel.readException(Parcel.java:1955)中的“gps”未知 android.os.Parcel.readException(Parcel.java:1897)位于 ILocationManager$Stub$Proxy.setTestProviderLocation(ILocationManager.java:1340) 在 location.LocationManager.setTestProviderLocation(LocationManager.java:1305)

有办法解决这个问题吗

谢谢,
raj

因为Android 10我的应用程序也有同样的问题,并且应用程序正在崩溃:

java.lang.IllegalArgumentException: Provider "gps" unknown
但在较旧的Android版本上,同样的代码也在工作。我在6号、7号、8号和9号进行了测试。我的临时解决方案是捕捉异常(直到找到更好的方法)。模拟应该仍然有效

try {
   mLocationManager.removeTestProvider(getBestProvider());
} catch (IllegalArgumentException e) {
   // handle the error e.getMessage()
}
在调试过程中,我可以在locationManager列表中看到提供商gps,如

mLocationManager.getProvider(getBestProvider())

由于Android 10我的应用程序也有同样的问题,并且应用程序正在崩溃:

java.lang.IllegalArgumentException: Provider "gps" unknown
但在较旧的Android版本上,同样的代码也在工作。我在6号、7号、8号和9号进行了测试。我的临时解决方案是捕捉异常(直到找到更好的方法)。模拟应该仍然有效

try {
   mLocationManager.removeTestProvider(getBestProvider());
} catch (IllegalArgumentException e) {
   // handle the error e.getMessage()
}
在调试过程中,我可以在locationManager列表中看到提供商gps,如

mLocationManager.getProvider(getBestProvider())

你称OnClickListener为什么样的小部件?@raj,你在活动类中声明了按钮视图吗?意思是
findViewById
public void onTestButtonClick(View v){Toast.makeText(getApplicationContext(),“Hello”,Toast.LENGTH_SHORT)。show();//createMockLocation();}//这是一个按钮单击侦听器,它可以工作(Toast)。您是否尝试
locationManager.setTestProviderEnabled(getBestProvider(),true)在调用setTestProviderLocation?locationManager.getBestProvider之前,它也可以返回“被动”,并将以
IllegalArgumentException结束:无法模拟被动位置提供程序
。您调用了什么样的小部件OnClickListener?@raj,您在活动类中声明了按钮视图吗?意思是
findViewById
public void onTestButtonClick(View v){Toast.makeText(getApplicationContext(),“Hello”,Toast.LENGTH_SHORT)。show();//createMockLocation();}//这是一个按钮单击侦听器,它可以工作(Toast)。您是否尝试
locationManager.setTestProviderEnabled(getBestProvider(),true)在调用setTestProviderLocation?locationManager.getBestProvider之前,也可以返回“被动”,并将以
IllegalArgumentException结束:无法模拟被动位置提供程序