相关疑难解决方法(0)

检测或阻止用户是否使用虚假位置

如果用户伪造该位置,我将阻止用户使用我的应用.所以我isFromMockProvider用来检查位置是否是假的(按照这里).但isFromMockProvider()在某些情况下可能会为伪造的位置返回false.

public void onLocationChanged(Location location) {
    textView.append("long:"+location.getLatitude()+" - lat:"+location.getLongitude()+" - isMock :"+location.isFromMockProvider() + "\n");
}
Run Code Online (Sandbox Code Playgroud)

我的情况是:我使用假冒伪劣GPS定位到一个位置然后我禁用虚假位置并转到我的应用程序.然后onLocationChanged返回假位置isFromMockProvider() = false

录像机:https://www.youtube.com/watch?v = rWVvjOCaZiI(在此视频中,我目前的位置是16.06,108.21,假位置是36.26,138.28.你可以在上一个视频中看到位置是36.26, 138.28但isFromMockProvider = false)

有没有办法检测用户在这种情况下是否使用虚假位置?任何帮助或建议将非常感谢.
DEMO项目

gps android location google-api-client

15
推荐指数
3
解决办法
3万
查看次数

LocationManager返回带有当前时间戳的旧缓存"Wifi"位置

我想要获取当前位置.为此我实现了LocationListener并为网络和GPS提供商注册:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Run Code Online (Sandbox Code Playgroud)

然后我阻塞30秒并使用传递给侦听器的第一个位置

onLocationChanged()
Run Code Online (Sandbox Code Playgroud)

精度为100米或更高的方法.

大部分时间这都很好.如果手机连接到某个Wifi网络,只需一秒钟即可获得正确的位置,精确度约为50米.如果没有Wifi但启用了GPS,那么获取位置当然需要一段时间.

然而,有时候,当连接到Wifi并获得当前位置时,会提供一些旧的(缓存?)之前的"Wifi"位置 - 它可能距离当前位置15分钟,距离15公里.问题是,那

location.getTime()
Run Code Online (Sandbox Code Playgroud)

返回当前时间 - 因此无法知道位置是否过时.

我想我必须实现一个更精细的解决方案 - 我只想知道为什么这些旧的"Wifi"位置具有当前时间戳而不是最初检索时的时间戳.

android location wifi

8
推荐指数
2
解决办法
5768
查看次数

标签 统计

android ×2

location ×2

google-api-client ×1

gps ×1

wifi ×1