android:如何使用模拟(假)坐标修复 gps?

Posted

技术标签:

【中文标题】android:如何使用模拟(假)坐标修复 gps?【英文标题】:android: how to fix gps with mock(fake) coordinates? 【发布时间】:2011-12-24 01:24:29 【问题描述】:

当 GPS 信号不可用时,我正在尝试以编程方式修复 GPS。我想这样做是为了向谷歌地图等其他应用程序提供模拟坐标。我尝试使用 GPS_PROVIDER 和 NETWORK_PROVIDER,但只有使用后者我才能获得对谷歌地图有效的新位置。但这仅适用于第一个 tima,如果我想重新修复更多模拟位置,谷歌地图没有看到任何变化......为什么? 我必须为我想做的事做服务?

public void setLocation(double latitude, double longitude)    


     //mocLocationProvider = LocationManager.GPS_PROVIDER;
     mocLocationProvider = LocationManager.NETWORK_PROVIDER;
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
     lm.clearTestProviderEnabled(mocLocationProvider);
     lm.requestLocationUpdates(mocLocationProvider,0,0,new llistener());
     lm.addTestProvider(mocLocationProvider, false, false, false, false, false, false, false, 0, 10);
     lm.setTestProviderEnabled(mocLocationProvider, true);
     Location loc = new Location(mocLocationProvider);
     loc.setTime(System.currentTimeMillis());
     loc.setLatitude(latitude);
     loc.setLongitude(longitude);
     loc.setAccuracy(10);
     lm.setTestProviderStatus(mocLocationProvider, LocationProvider.AVAILABLE,null, System.currentTimeMillis());
     lm.setTestProviderLocation(mocLocationProvider, loc);   


和位置监听器

public class llistener implements LocationListener 
@Override
public void onLocationChanged(Location loc) 
    // TODO Auto-generated method stub


@Override
public void onProviderDisabled(String provider) 
    // TODO Auto-generated method stub


@Override
public void onProviderEnabled(String provider) 
    // TODO Auto-generated method stub


@Override
public void onStatusChanged(String provider, int status, 
        Bundle extras) 



谢谢

【问题讨论】:

你解决了这个问题吗?我也可以只设置一次模拟位置。 【参考方案1】:

模拟地点需要什么:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">

同样在安卓手机设置中确保你勾选了“允许模拟位置”复选框

locationManager.addTestProvider(mocLocationProvider, false, false,
                    false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);

。 现在每当你想发送一个位置,调用这个代码:

Location mockLocation = new Location(mocLocationProvider); // a string
mockLocation.setLatitude(location.getLatitude());  // double 
mockLocation.setLongitude(location.getLongitude()); 
mockLocation.setAltitude(location.getAltitude()); 
mockLocation.setTime(System.currentTimeMillis()); 
locationManager.setTestProviderLocation( mocLocationProvider, mockLocation); 

.

但这只适用于第一次

因为你曾经调用过它。

我必须为我想做的事做服务

你可以这样做,即使是 AsyncTask 也可以

执行与否:lm.requestLocationUpdates()

是的,您必须使用mocLocationProvider

我已经多次调用 setLocation(latitude,longitude) 方法,但它只在谷歌地图上第一次起作用(位置更新)

没有方法叫setLocation(),使用setTestLocation()

实际上我必须在 asynckTask 中做什么

您可以使用线程、TimerTask 或任何您喜欢的东西。这个想法是每秒将位置注入框架。

【讨论】:

我们在 *** 上表示感谢,通过用绿色勾号来支持/标记解决方案。不客气。 我设置了正确的权限。只是另外两个疑问:1)我不需要为此在 LocationListner 上绑定 LocationManager 吗? 2)为什么如果我尝试手动调用 setLocation(所以我不止一次调用 LocationManager)它不起作用并且我必须使用 asynktask?我必须在 asynctask 中调用什么?非常感谢 LocationListener 上绑定LocationManager 是什么意思?第二个问题我也没看懂。 我的意思是如果我必须这样做:lm.requestLocationUpdates(mocLocationProvider,0,0,new llistener());我重申第二个问题:我已经多次调用 setLocation(latitude,longitude) 方法,但它仅在第一次用于谷歌地图时才有效(位置更新)。实际上我必须在 asynckTask 中做什么?你有什么例子可以更好地理解我在 asynktask 中要做的事情吗?非常感谢

以上是关于android:如何使用模拟(假)坐标修复 gps?的主要内容,如果未能解决你的问题,请参考以下文章

android - 在设备模拟器上更改 gps 坐标

使用 Android Studio 在模拟器中设置 GPS 位置

android上的假gps应用程序(它是如何工作的)

Android模拟器设置gps地理位置

模拟坐标 Android Marshmallow

防止欺骗位置