web-dev-qa-db-ja.com

locationManager.getLastKnownLocation()はnullを返します

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);が場所nullを返す理由がわかりません。 nullを除いて、すべての許可を与えました。

          if (isGPSEnabled) {
            if (location == null) {
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("GPS", "GPS Enabled");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
        }
15
user3291590

これとまったく同じ問題がありました。それは私のデバイスが最後の既知の場所を保存していなかったからです。私は単にGoogleマップに行き、GPSで自分の位置を特定し、その後getLastKnownLocation()の値が返されました

15
2bard

このような場所の更新をリクエストできます

_mLocationManager.requestLocationUpdates(myProvider, 0, 0, locationListener);
_

その後、_locationListener.onLocationChanged_の最初のコールバックで座標を設定します。 mLocationManager.removeUpdates(locationListener)を呼び出すことを忘れないでください

12
aknopov

documentation にコード化すると、デバイスが最後の既知の場所を認識していない場合、nullを返します。おそらくGPSはあなたを見つけることができません。とにかく、1分以上かかります。だから、晴れた空の下で、高層ビルから離れて外に出て、GPSがあなたを見つけることができるまで待ちましょう。

4
Farouk Touzi

位置情報を取得するためにこの方法を使用しました

private void startReceivingLocationUpdates() {

    if (mLocationManager == null) {

        mLocationManager = (Android.location.LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);

    }

    if (mLocationManager != null) {

        try {

            mLocationManager.requestLocationUpdates(

                    Android.location.LocationManager.NETWORK_PROVIDER,
                    1000,
                    0F,
                    mLocationListeners[1]);

        } 
     catch (SecurityException ex) 
         {
            Log.i(TAG, "fail to request location update, ignore", ex);

        } 

       catch (IllegalArgumentException ex)
       {
            Log.d(TAG, "provider does not exist " + ex.getMessage());
        }

        try {

            mLocationManager.requestLocationUpdates(

                    Android.location.LocationManager.GPS_PROVIDER,
                    1000,
                    0F,
                    mLocationListeners[0]);

            if (mListener != null) mListener.showGpsOnScreenIndicator(false);


        }
       catch (SecurityException ex) {

            Log.i(TAG, "fail to request location update, ignore", ex); } 

        catch (IllegalArgumentException ex) {

            Log.d(TAG, "provider does not exist " + ex.getMessage());  }

        Log.d(TAG, "startReceivingLocationUpdates");
    }
}
3
Pawan asati

GPSをプロバイダーとして使用すると、1〜2 mntで結果が得られるので、ロケーションストップを取得するときにそれを論争で確認する必要があり、ネットワークプロバイダーは要求時にすぐにロケーションを提供します。そのため、GPSプロバイダーでは現在地の緯度経度を即座に取得できません。

GPSは最初に1〜2回しかかかりません。その後、電話で位置情報を提供します...

1