在模拟位置后重置位置提供商以使用实际GPS

时间:2016-07-25 15:13:37

标签: android gps mocking

作为一个编码新手,这是我的第一个问题,如果它的边缘有点粗糙而且代码不是史诗,那就道歉了。

我在Android中嘲笑位置,我能够成功模拟GPS_PROVIDER。但是,当我的模拟应用程序未运行时,该位置不会返回到用户的实际位置。有没有办法停止模拟位置,以便真正的GPS位置返回并正常更新?

我用来模拟位置的代码是(从活动中提取):

try
    {
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 50, 0, lis);

        lm.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, true, true, true, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);

        loc = new Location(LocationManager.GPS_PROVIDER);
        loc.setLatitude(51.5219145);
        loc.setLongitude(-0.1285495);
        loc.setTime(System.currentTimeMillis());
        loc.setAccuracy(10);
        loc.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());


        t = new Timer();

        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                loc.setTime(System.currentTimeMillis());
                loc.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
                lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, loc);
            }
        }, 0, 2000);

    }catch(SecurityException e){
        e.printStackTrace();
    }

我尝试使用以下方法删除模拟的位置提供程序:

lm.setTestProviderEnabled(LocationManager.GPS_PROVIDER, false);
lm.clearTestProviderLocation(LocationManager.GPS_PROVIDER);

if (lm.getProvider(LocationManager.GPS_PROVIDER) != null){
    Log.i("REMOVE", "test provider");
    lm.removeTestProvider(LocationManager.GPS_PROVIDER);
}

上面确实运行但似乎没有做任何事情。我怀疑我已经替换了默认的位置提供程序。有没有办法恢复它?我很感激您提供的任何建议。感谢。

1 个答案:

答案 0 :(得分:1)

 lm.removeTestProvider(LocationManager.GPS_PROVIDER);

删除提供商时,只需让Gps接收新的位置,然后就可以修复。你可以测试一下

  1. 设置Gps的模拟位置
  2. 转到GoogleMaps并查看您的模拟位置(必须启用Gps)
  3. 转回您的应用并停止嘲笑
  4. 再次使用GoogleMaps,等到Gps提供商收到真实位置。这可能需要一些时间,当我在家里测试时,需要1-2分钟,但在阳台上只需5秒钟。