防止欺骗位置

Posted

技术标签:

【中文标题】防止欺骗位置【英文标题】:Prevent spoofing location 【发布时间】:2017-05-14 13:10:02 【问题描述】:

当用户的设备低于 18 API 时,有没有办法?

我尝试过使用下面的代码,但是当用户是: 1.在android设置中启用模拟位置并激活假gps 2. 在设置中禁用模拟位置(不暂停/停止假 gps 应用)-> 在这种情况下,我的应用仍然获得假位置。

我的代码:

if (isGPSEnabled) 
    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER,
            MIN_TIME_BW_UPDATES,
            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
    if (locationManager != null) 
        location = locationManager
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if(location != null)
            if(android.os.Build.VERSION.SDK_INT >= 18)
                isMock = location.isFromMockProvider();
            else
                isMock = !Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");

            if(!isMock)
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                prefs.setMockProvider(false);
            else
                prefs.setMockProvider(true);
            
        
    

【问题讨论】:

【参考方案1】:

从设置中禁用enable mock locations 选项没有意义,即使您从设备中删除了模拟应用程序,模拟位置也会保留。

解决方案:向给定的提供商发出位置请求并等到收到新位置

【讨论】:

以上是关于防止欺骗位置的主要内容,如果未能解决你的问题,请参考以下文章

如何防止其他用户更改 gps 位置和位置更新调用每个小间隔(比如 3 秒)

利用开源项目实现定位和时间欺骗

轩辕实验室┃利用开源项目实现定位和时间欺骗

检查地理位置是不是被欺骗

欺骗谷歌地图位置

位置欺骗器破坏了地理定位器?