我想选择一个在 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();
// ...
现在,我关闭每个网络接口(interface)并在我的设备上设置飞行模式(HTC Desire,Android 2.2)。我断开设备与 USB 的连接。显然,目前还没有提供者可以实际向设备提供位置数据。我特别要求 getBestProvider 仅针对启用的提供程序,因此我希望它在这种情况下返回 null 或空字符串。我希望 isProviderEnabled 返回 false。
实际结果是 getBestProvider 返回“network”,而 isProviderEnabled 报告它已“启用”。 “网络”是否总是“启用”,即使不是?
最佳答案
经过一番挖掘,我可以回答我自己的问题。首先我尝试了飞行模式:
ConnectivityManager connectivityMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] nwInfos = connectivityMgr.getAllNetworkInfo();
for (NetworkInfo nwInfo : nwInfos) {
Log.d(TAG, "Network Type Name: " + nwInfo.getTypeName());
Log.d(TAG, "Network available: " + nwInfo.isAvailable());
Log.d(TAG, "Network c_or-c: " + nwInfo.isConnectedOrConnecting());
Log.d(TAG, "Network connected: " + nwInfo.isConnected());
}
ConnectivityManager 正确报告“错误”,因为没有连接。这对于检查您是否真的有网络以及因此是否有可用的基于网络的位置提供程序很有用。然后我再次查看了我的设备设置。这是答案:
locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
报告用户是否检查了设备设置(在我的情况下,在 Location - My Location 下)。如果您取消选中那里的所有提供程序,它会按预期返回 null。它实际上记录在 isProviderEnabled()但我一定忽略了它。结案。
关于android - 位置管理器 : is the "network" provider always enabled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907769/