我有一个模拟位置提供程序的问题。我有一个应用程序,需要获得准确的有效位置,我不希望用户能够欺骗他们。所以我检查了模拟位置启用设置,它工作得很好。
但是位置提供程序有一个问题。如果启用模拟位置,使用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");