3

我正在实现一个应用程序,当你打开它时它会获取你的位置。它仅在创建活动时获取,所以我不需要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 提供商返回的位置是错误的?我应该先查看网络提供商,如果它为空,请使用 gps?这个应用程序应该是在外面使用的,所以我想先用gps,因为它更准确。

谢谢!

4

1 回答 1

1

作为Android 文档中的状态

getLastKnownLocation(String provider)
返回一个 Location 指示从给定提供者获得的最后一个已知位置修复的数据。

因此,当您的设备提前 2 小时获得位置并且同时从未获得新的修复时,Location 对象会返回该旧位置。我建议您使用LocationListener但线程会在一段时间后停止收听 - 这种方法可以防止设备在卫星视野不佳或您在建筑物内时进行长时间的修复搜索。如果LocationListener获得位置使用它,如果没有 - 使用NETWORK_PROVIDER

于 2013-03-01T11:13:18.693 回答