【发布时间】:2016-07-07 17:28:31
【问题描述】:
说明
我在尝试使用 android 模拟位置时遇到问题,我的主要目标是将 android GPS 设置为认为我们在不同的位置,也就是假 GPS。
当前尝试
我目前尝试了两种不同的类似解决方案,这两个网站都提供:
这两个教程都是 2012 年的,我不知道它们是否已经过时或者我很难实施它们。
编码开发
首先我确保我有权限:
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_MOCK_LOCATION *
注意:1 和 2 都被选中,如果它们不可用,我使用 requestPermissions 函数请求许可。第三个是不能问的,实际上只能在debug模式下通过AndroidManifest.xml添加。
我还确保在设置>开发者选项>允许模拟位置中选择了我的应用程序。
毕竟,我已经制作了这个我尝试通过 OnCreate 方法或按钮的 OnClick 调用的函数:
public void mockLocation(){
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy( Criteria.ACCURACY_FINE );
String mocLocationProvider = lm.getBestProvider( criteria, true );
if ( mocLocationProvider == null ) {
Toast.makeText(getApplicationContext(), "No location provider found!", Toast.LENGTH_SHORT).show();
return;
}
lm.addTestProvider(mocLocationProvider, false, false,
false, false, true, true, true, 0, 5);
lm.setTestProviderEnabled(mocLocationProvider, true);
Location loc = new Location(mocLocationProvider);
Location mockLocation = new Location(mocLocationProvider); // a string
mockLocation.setLatitude(-26.902038); // double
mockLocation.setLongitude(-48.671337);
mockLocation.setAltitude(loc.getAltitude());
mockLocation.setTime(System.currentTimeMillis());
lm.setTestProviderLocation( mocLocationProvider, mockLocation);
Toast.makeText(getApplicationContext(), "Working", Toast.LENGTH_SHORT).show();
}
如果我以这种方式编译和测试,我将收到 Toast:“未找到位置提供程序!”。但是如果我将 mocLocationProvider 更改为:
String mocLocationProvider = LocationManager.NETWORK_PROVIDER;
我得到 APP 崩溃,在 LogCat 中它说在这一行期间崩溃了:
lm.setTestProviderLocation(mocLocationProvider, mockLocation);
所以我目前别无选择,不知道如何前进。
【问题讨论】:
-
有时卡住了,您尝试重新启动设备。在检查 GPS 的状态时我也遇到了这个问题,尽管我打开了它,但它总是返回 false。并调试它注意到 Not found gps provider。所以重启设备,它消失了
标签: java android android-studio gps