0

我正在尝试获取设备的位置,所以我创建了这个类

public class MainActivity extends Activity implements LocationListener

和一个方法

private Location getLocation(Context ctx) {
    Location location = null;
    LocationManager lm = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    List<String> providers = lm.getProviders(true);

    for(int i=providers.size() - 1; i>=0; i--) {
        lm.requestLocationUpdates(providers.get(i), 100, 1, MainActivity.this);
        location = lm.getLastKnownLocation(providers.get(i));
        if(location != null) {
            Log.i("Used provider", providers.get(i));
            break;
        }
    }

    if(location != null) {
        Log.i("Latitude", String.valueOf(location.getLatitude()));
        Log.i("Longitude", String.valueOf(location.getLongitude()));
        Log.i("Accuracy", String.valueOf(location.getAccuracy())+" m");
    }

    return location;
}

它工作得很好,但它总是跳过 GPS,即使我在外面。我不得不说我将接口 LocationListener 中的所有重写方法都留空了,因为我不知道应该放什么。任何想法?您认为我使用的代码可以吗?非常感谢!

编辑:感谢您的回复,但我的代码一定有问题。通过日志我可以看到设备正在使用哪个提供商:昨天它使用的是“被动”并且位置是完美的(26 m 精度),而今天它仍然使用“被动”但精度是 2288 m,这非常糟糕!如果我尝试使用谷歌地图定位我的位置,那很好。我错过了什么吗?

4

1 回答 1

0

我认为它从 GSM/WiFi 中选择位置,因为它比 GPS 中的位置更快,尝试禁用 WiFi 或禁用从 WiFi/GSM 获取位置,然后尝试定位。

于 2013-08-04T22:02:34.787 回答