locationManager.getLastKnownLocation возвращает нуль после запроса - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь получить текущее местоположение через GPS и показать его.

Прежде всего, я инициализирую LocationManager, поэтому я всегда получаю метод getLocation()

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, LocationListener {

    private static final int REQUEST_LOCATION = 1;
    private static int MY_PERMISSIONS_REQUEST_ACCESS;

    TextView locationText;

    LocationManager locationManager;
    String lattitude,longitude;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Button buttonLocate = (Button) findViewById(R.id.buttonLocate);

        locationText = (TextView)findViewById(R.id.locationText);

        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

        buttonLocate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if(locationManager != null) {
                    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                        // ..DO SMTH
                    } else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                        getLocation();
                    }

                }
            }
        });

    }

В методе getLocation() Я проверяю разрешение и, если они предоставлены, я запрашиваю обновления местоположения и пытаюсь получить широту и долготу, и вот моя проблема, потому что местоположение всегда нулевое , поэтому я не могу получить координаты! Что может быть не так с кодом и как я могу это исправить? ...

void getLocation() {

    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
            (MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

    } else {

    // REQUEST!

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);

        Location location;


        if (locationManager != null) {
               location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                 if (location != null) {
                        // LOCATION IS ALWAYS NULL!!!

                double latti = location.getLatitude();
                double longi = location.getLongitude();
                lattitude = String.valueOf(latti);
                longitude = String.valueOf(longi);

                locationText.setText("Your current location is" + "\n" + "Lattitude = " + lattitude
                        + "\n" + "Longitude = " + longitude);

            } else {

                Toast.makeText(this, "Unble to Trace your location", Toast.LENGTH_SHORT).show();

            }
        } 
    }

1 Ответ

0 голосов
/ 07 ноября 2018

getLastKnownLocation возвращает последнее известное местоположение устройства. Он вернет ноль, если не будет кэшировано ни одного последнего известного местоположения.

Вам необходимо запросить обновление местоположения, когда getLastKnownLocation равно нулю.

Чтобы получить обновление местоположения, вы должны реализовать onLocationChanged :

public void onLocationChanged(Location location) {
    // Called when a new location is found by the network location provider.
    Log.i("Message: ","Location changed, " + location.getAccuracy() + " , " + location.getLatitude()+ "," + location.getLongitude());
}
...