48
LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

それは私が聞くために使用しているコードです。GPSを有効にすると、すべてが正常に機能します。ただし、GPSを無効にしてネットワークの場所に依存していると、古い結果が得られます。この場合は、2日前のものです。更新できません。getLastKnownLocationを呼び出すと、同じ古い結果が返されます。

グーグルマップは問題なく更新されるので、ハードウェア/システム構成の問題ではないことを私は知っています。

私はグーグルで調べて、同様の問題を抱えている人を何人か見つけましたが、答えはありません。プロジェクトをAPIレベル8(2.2)と15(4.0.3)にターゲティングしてみました。同じ結果。私の電話はICSを実行しています。

また、GPS_PROVIDERのリクエストを削除し、getAllProviders()にすべてのリクエストを含めてみました。同じ取引。

NETWORK_PROVIDERが更新されない理由はありますか?どんな助けでも大歓迎です。

(PSいいえ、通常は時間/距離パラメーターとして「1、1」を使用しません。これをデバッグしているときに変更しただけです。)

編集:はい、isProviderEnabled()がtrueを返すことを忘れました。

4

5 に答える 5

23

私は最終的にこの問題を解決する方法を見つけました(私の質問はこちらを参照してください)。

私の場合、S3 Galaxy Mini では、上記のような同様の症状 (再起動するまで位置情報が更新されない...) がありました。ほとんどの場合、デバイスが低電力状態になると位置情報の更新が停止しましたが、電話が完全に充電されていても更新が停止することもありました。明らかに、これは のどこかに問題がありLocationManagerます。LocationManager新しい Google Play Services API を場所 (LocationClientクラス )に使用してバイパスすることができました。

Google マップは公開される前から Google Play Services API を使用していたため、これがおそらく位置情報の更新がまだ Google マップで機能していた理由です。

この問題が発生した場合は、Play Services API を使用する代わりに Play Services API を使用して場所を取得する方法を示すこのリンクに従うことをお勧めします 。LocationManager

私は Play Services で現在地の更新を実行していますが、このような問題はもうまったくありませんでした。いつでも定期的に現在地の更新を受け取り続けています。

これには、ユーザーのデバイスに Google Play がインストールされている必要があることに注意してください。そのため、Kindle などは対象外になります。また、Android 2.2 以上が必要です。

于 2013-07-30T21:25:35.997 に答える
0

removeUpdates(listener)現在、on app shutdown または activity ondestroyを使用していないことが原因であると思われます。私はそれを確実に実装し、それが修正されることを願っています。私は他に何も考えられません。

--編集-- 残念ながら、これは修正されませんでした。

于 2013-05-15T17:51:59.937 に答える
-2

1) まず、上記で提案されている許可を与えているかどうかを確認します。2) 携帯電話でインターネットが機能していることを確認する必要があります。3) 以下のコードを見つけてください。

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`
于 2013-07-27T14:10:00.447 に答える
-3

このように場所を更新するために使用できます.Locationlistenerは場所に対して機能します....

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;

import android.util.Log;

public class MainActivity extends Activity implements LocationListener{

protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
protected boolean gps_enabled,network_enabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txtLat = (TextView) findViewById(R.id.textview1);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public void onLocationChanged(Location location) {

txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" +      location.getLongitude());

}

@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude","disable");
}

@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude","enable");
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude","status");
}


}
于 2013-08-16T10:30:49.343 に答える