Android:Mock位置在几秒钟后变回原创

时间:2016-12-17 18:05:44

标签: android google-maps location

我有一个Android应用程序,我需要用户模拟他们当前的位置。 下面是我使用的代码,让用户按绿色按钮开始模拟他们的位置。

下面的代码开始伪造位置"绿色按钮"被按下了。

greenButton.setOnClickListener(new View.OnClickListener(){
     @Override
     public void onClick(View view) { 
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.addTestProvider(LocationManager.GPS_PROVIDER,
                "requiresNetwork" == "",
                "requiresSatellite" == "",
                "requiresCell" == "",
                "hasMonetaryCost" == "",
                "supportsAltitude" == "",
                "supportsSpeed" == "",
                "supportsBearing" == "",
                Criteria.POWER_LOW,
                Criteria.ACCURACY_FINE);

        Location newLocation = new Location(LocationManager.GPS_PROVIDER);
        newLocation.setLatitude(fakeLocation.getLatitude());
        newLocation.setLongitude(fakeLocation.getLongitude());
        newLocation.setAccuracy(fakeLocation.getAccuracy());
        newLocation.setTime(System.currentTimeMillis());
        newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
        lm.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
        lm.setTestProviderStatus(LocationManager.GPS_PROVIDER,
                LocationProvider.AVAILABLE,
                null, System.currentTimeMillis());
        lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation);
      }
 });

当我在地图上放置标记并按绿色按钮时。位置嘲笑开始。那个"假位置"成为我现在的位置。

但是在10-20秒之后,嘲笑就结束了。我的真实位置"成为我现在的位置。我在网上看到了很多例子,他们使用我用来模拟位置的相同代码。我不知道为什么我的应用会发生这种情况。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

首先,位置请求会影响适当位置提供商的模拟位置。

如果您为GPS提供商创建并设置模拟位置,然后再次为GPS提供商发出位置请求,模拟的将保持不变,直到GPS硬件获得新的位置。这可能需要10-20秒或更长时间(但是在10-20秒之后,嘲笑刚刚结束......

此问题也是一些假位置应用程序问题的答案。你可以看到像&#34这样的评论;在使用这个应用程序后我无法获得我当前的真实位置!!!"在市场上。因为他们需要像你一样提出定位请求。

最后,请在服务中循环模拟操作。我建议在后台线程上进行,也许每1或2秒。通过这种方式,您可以减少对其他应用程序的可能位置请求的影响。

$scope.logo = 'localhost:3000/modules/images/default.png';

 <img ng-src="{{logo}}">

答案 1 :(得分:0)

尝试在设置虚假位置后停止更新。

yourLocationManager.removeUpdates(yourLocationListener);

有关详细信息,请参阅https://developer.android.com/reference/android/location/LocationManager.html

答案 2 :(得分:-1)

设置模拟位置后,您必须停止获取更多位置请求。

使用manager.removeUpdates(this)。正如documentation所说:

使用给定的LocationListener删除当前活动的位置更新的任何当前注册。在此调用之后,此侦听器将不再进行更新。因此,您的模拟位置将保持设置。