我正在尝试使用以下案例搜索最佳提供商:
// GPS
case R.id.main_menu_gps:
// Set up location services
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
mBestProvider = mLocationManager.getBestProvider(new Criteria(), true);
Log.d(DEB_TAG, "@@@@Value of mBestProvider is " + mBestProvider);
if(mBestProvider != null){
showGpsSearchingDialog();
mLocationManager.requestLocationUpdates(mBestProvider, 150000, 1, this);
} else {
Log.d(DEB_TAG, "Provider is null");
showGpsAlertDialog();
}
break;
我的设备正在返回“GPS”作为最佳提供商,但无法找到位置,我的进度对话框将永久显示。如果我进入“位置/安全”的电话设置并检查“使用无线网络”,最好的提供商是网络,它可以返回一个位置。
当最好的提供商是GPS并且没有返回数据时,我做错了吗?
答案 0 :(得分:1)
您可以查看我的策略,选择最佳提供商What is the simplest and most robust way to get the user's current location on Android?
答案 1 :(得分:0)
你并没有真正做错什么,只有通过GPS获取位置的某些技术。主要问题是GPS位置可能是最佳可用提供商(就准确性而言),但是它可能无法获得当前位置对网络/结构阻碍的影响。没有逻辑来确定提供者试图获得位置失败或没有所需准确度时所经过的时间量;您可能永远无法通过GPS获取该位置,并且必须使用其他提供商或last known location作为后备。
答案 2 :(得分:0)
如果启用了GPS,它将始终将GPS作为最佳提供者返回,因为您指定了空标准。 GPS修复可能需要相当长的延迟,如果你在建筑物中,你可能永远无法修复。因此,如果网络位置可以接受,那么您应该只做网络。或者有一个超时,以便在某些时候你停止等待gps然后切换到网络。如果您使用的是MapView,则可能需要使用MyLocationOverlay,因为它的内部逻辑将为您处理。
您的代码看起来很顺便。