【发布时间】:2011-06-21 22:07:10
【问题描述】:
我想选择一个在 Android 中启用的 LocationProvider。项目构建目标为 Android 2.1。
这就是我在 onCreate() 中所做的。
// ...
LocationManager locationMgr = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
criteria.setCostAllowed(false);
String bestProvider = locationMgr.getBestProvider(criteria, true);
Toast.makeText(getApplicationContext(), "Provider = " + bestProvider + " enabled= " + locationMgr.isProviderEnabled(bestProvider), Toast.LENGTH_LONG).show();
// ...
现在,我关闭每个网络接口并在我的设备上设置飞行模式(HTC Desire,Android 2.2)。我断开设备与 USB 的连接。显然,目前还没有提供者可以实际向设备提供位置数据。我特别要求 getBestProvider 仅针对启用的提供程序,因此我希望它在这种情况下返回 null 或空字符串。我希望 isProviderEnabled 返回 false。
实际结果是 getBestProvider 返回“network”,而 isProviderEnabled 报告它已“启用”。 “网络”是否总是“启用”,即使不是?
【问题讨论】:
-
这也可能是由于Android缓存网络位置造成的,因为粒度很粗,不太可能很快改变。不过这只是猜测。