我正在实施一个应用程序,在您打开它时获取您的位置。它只在创建活动时获取,因此我不需要LocationListener
。我正在用两个真实的设备测试它。
首先,我尝试使用GPS_PROVIDER
获取位置。如果结果为NULL,我使用NETWORK_PROVIDER
。由于我在建筑物内进行测试,因此预计我将无法使用GPS提供商获取该位置。
在其中一个设备中,使用GPS_PROVIDER
的位置为NULL,NETWORK_PROVIDER
返回正确的位置。但是在其他设备中,使用GPS_PROVIDER的位置不是NULL,但它是错误的(它位于与我目前不同的城市!)。这是我正在使用的代码:
private void getPosition() {
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
myloc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(myloc == null)
myloc = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(myloc != null){
Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
try{
List<Address> addresses = geoCoder.getFromLocation(myloc.getLatitude(), myloc.getLongitude(), 1);
if(addresses.size()>0){
String add = "";
for(int i=0; i<addresses.get(0).getMaxAddressLineIndex(); i++)
add += addresses.get(0).getAddressLine(i)+"\n";
placeEdit.setText(add);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
我怎么知道GPS提供商返回的位置是错误的?我应该首先查看网络提供商,如果它是null,请使用gps吗?这个应用程序应该在外面使用,所以我想首先使用gps,因为它更准确。
谢谢!
答案 0 :(得分:1)
getLastKnownLocation(String provider)
返回一个位置 指示来自最后已知位置定位的数据 给予提供者。
因此,当您的设备提前2小时获得位置并且在此期间永远不会获得新的修复时,Location对象将返回旧位置。我建议您使用LocationListener
但是在一段时间后会停止监听的线程 - 这种方法可以防止设备在卫星视图不良或您在建筑物内时进行长时间的修复搜索。如果LocationListener
获得排名,请使用{ - 1}}。