0

このコードを使用してユーザーの場所を特定するために使用されるアプリケーションがあります

public static Location getCurrentLocation(Context context) {
    LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    Criteria c = new Criteria();
    String provider = lm.getBestProvider(c, true);
    Location location;
    if (provider == null) {
        location = new Location("gps");
        location.setLatitude(U.LATITUDE);
        location.setLongitude(U.LONGITUDE);
    } else {
        location = lm.getLastKnownLocation(provider);
        if (location == null) {
            location = new Location("gps");
            location.setLatitude(U.LATITUDE);
            location.setLongitude(U.LONGITUDE);
        }
    }
    return location;
}

このコードは、プロバイダーが null または場所が null の場合にのみ動作を返すようです。私の推測では、このコードで何かが変更されました。

String provider = lm.getBestProvider(c, true);
4

2 に答える 2

3

あなたのコードと非常によく似たコードがいくつかあり、Android 4.4 へのアップグレード後にデバイスで動作しなくなりました (つまり、getBestProvider は以前にはなかった null を返しました)。

別のアプリが NetworkProvider が利用できないことを表示し (wifi と 3G の両方に完全に接続していたにもかかわらず)、GPS 信号を取得できなかった (明らかに、私が屋内にいたため) ことを確認したときに、その理由を発見しました。次に、Android の位置情報のクイック設定を切り替えると、Android 4.4 の新しい位置情報管理に同意するよう求めるダイアログが表示されました ( https://support.google.com/nexus/answer/3467281を参照)。その後、私のコードは以前と同じように機能しました。

于 2013-12-05T15:53:34.783 に答える