Любой способ отложить getLatKnownLocation? Android GPS - PullRequest
1 голос
/ 22 марта 2011

Поэтому я использую метод getLastKnownLocation, чтобы получить местоположение Loc устройства, но оно возвращает ноль, если нет GPS-исправления.Есть ли способ отложить выполнение getLastKnownLocation до тех пор, пока у GPS не будет действительного местоположения?

package test.example;

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

public class testGPS extends Activity 
{
    private LocationManager lm;
    private LocationListener locationListener;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);


        //---use the LocationManager class to obtain GPS locations---
        lm = (LocationManager) 
            getSystemService(Context.LOCATION_SERVICE);    

        locationListener = new MyLocationListener();

        lm.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            0, 
            0, 
            locationListener);    

        Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        if (loc != null) {
            tv.setText("Hello, lat is " + loc.getLatitude() + " lon is " + loc.getLongitude());
            setContentView(tv);
        } else {
            tv.setText("Hello, loc is null :(");
            setContentView(tv);
        }
    }

    private class MyLocationListener implements LocationListener 
    {
       @Override
        public void onLocationChanged(Location loc) {

        }

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

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

        @Override
        public void onStatusChanged(String provider, int status, 
            Bundle extras) {
            // TODO Auto-generated method stub
        }
    }        

}

1 Ответ

1 голос
/ 22 марта 2011

Вы неправильно понимаете, как работает местоположение в Android. getLastKnownLocation () не предоставляет ноль, если у GPS нет исправления, он возвращает ноль, если нет предыдущего известного местоположения - местоположение не должно исходить из GPS (оно может быть получено через Wi-Fi или мобильную сеть), и вызов этого метода делает не давать указание структуре местоположения возвращать новое местоположение.

Вам необходимо начать снова, после полного прочтения и понимания этой страницы: http://developer.android.com/guide/topics/location/obtaining-user-location.html

Он включает в себя все, что вам нужно для обработки местоположений в Android, и вам нужна среда, которая соответствует потребностям вашего приложения. Если вы хотите, чтобы местоположение сохранялось (чтобы уменьшить использование GPS), то вы можете сохранить местоположение в настройках и / или включить отправку сетевого местоположения (не так точно, но обычно быстрее). Для некоторых приложений вы можете быстро выбрать приблизительное местоположение (с помощью последнего известного поставщика или поставщика сетевых расположений) и затем обновить его, когда появится точное местоположение GPS. Но подход, который вы используете, зависит от приложения.

...