3

requestLocationUpdates()最初にキャッシュされた場所を取得し、その後新しい場所を取得しますか?

私たちは、現在地を使用して地元の企業を検索するアプリに取り組んでいます。ほとんどの場合、アプリは正常に動作しました。しかし、一度それは間違った場所を与えました。現在の場所ではなく、古い場所が返されました。それは約 20 マイル離れていて、約 2 時間経過していました。この 2 時間で、GPS またはネットワークの位置情報を使用した可能性のある他のアプリを実行していませんでした。電話はずっとかかっていました。

アプリは Motorola Atrix 4G とジンジャーブレッドで実行されています。位置情報が必要なのは 1 回だけなので、取得した最初の位置情報を使用するだけです。アプリはフォアグラウンドで位置情報を受け取る予定です。

コードを見て、何か問題がないか確認してください。

public class MyLocation {
    LocationManager lm;
    boolean network_enabled=false;
    public static double lat = 0.0;
    public static double lng = 0.0;

    public boolean getLocation(Context context)
    {
        //I use LocationResult callback class to pass location value from MyLocation to user code.
        if(lm==null)
            lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

        //exceptions will be thrown if provider is not permitted.
        try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){ex.printStackTrace();}

        //don't start listeners if provider is not enabled
        if(!network_enabled)
            return false;

        if(network_enabled)
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
        return true;
    }

    LocationListener locationListenerNetwork = new LocationListener() {
        public void onLocationChanged(Location location) {
            lat = location.getLatitude();
            lng = location.getLongitude();
            lm.removeUpdates(this);
        }
        public void onProviderDisabled(String provider) {}
        public void onProviderEnabled(String provider) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    };
}
4

1 に答える 1