Android模拟位置提供程序未从LocationManager中清除



我有一个模拟位置提供程序的问题。我有一个应用程序,需要获得准确的有效位置,我不希望用户能够欺骗他们。所以我检查了模拟位置启用设置,它工作得很好。

但是位置提供程序有一个问题。如果启用模拟位置,使用gps伪造应用程序设置位置,然后禁用模拟位置和所有其他位置提供程序,位置管理器仍然有对模拟位置提供程序的引用。因此,虽然模拟位置被禁用,但位置管理器告诉我gps已启用,并提供模拟位置数据。

我知道您可以从位置管理器中清除测试提供程序,但是必须启用模拟位置才能做到这一点

有没有人遇到过这个,或者有一个解决方案?

认为我找到了一种方法来获得准确的读数,无论GPS/网络提供商是否启用:

ContentResolver contentResolver = context.getContentResolver();
boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(contentResolver, LocationManager.GPS_PROVIDER);
boolean networkEnabled = Settings.Secure.isLocationProviderEnabled(contentResolver, LocationManager.NETWORK_PROVIDER);

你确定你打过电话吗?

  • removeUpdates()
  • removeTestProvider()
  • setTestProviderEnabled() with false
  • clearTestProviderEnabled() ?

看看LocationManagerTest是怎么做的。

// disable mocking. 
Settings.Secure.putString(getContentResolver(),
       Settings.Secure.ALLOW_MOCK_LOCATION, "0");

最新更新