getLastKnownLocation первый раз возвращает нулевую проблему - PullRequest
0 голосов
/ 04 февраля 2019

Я занимаюсь разработкой простого приложения для определения местоположения Android, но у меня есть небольшая проблема. (Также извините за мой плохой английский.)

Я хочу получить текущее местоположение с помощью нажатия кнопки, но getLastKnownLocation возвращает null allв первый раз.

Но также, если я сначала открыл карты Google и показал свое текущее местоположение на карте, после этого я прошел фоновый рисунок, затем открыл свое собственное приложение, нажмите кнопку, которая работает.Но я не хочу таким образом, я просто хочу указывать местоположение в моем приложении не таким образом.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Object clipboardService = getSystemService(CLIPBOARD_SERVICE);
    final ClipboardManager clipboardManager = (ClipboardManager) clipboardService;
    tvEnlem = (TextView) findViewById(R.id.textViewEnlem);
    tvBoylam = (TextView) findViewById(R.id.textViewBoylam);
    retrieveLocationButton = (Button) findViewById(R.id.buttonNeredeyim);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, 101);
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }


    retrieveLocationButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showCurrentLocation();
        }
    });

}

protected void showCurrentLocation() {

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, 101);
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.

        return;
    }


    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location != null) {
        String message = String.format(
                "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude()
        );
        Toast.makeText(MainActivity.this, message,
                Toast.LENGTH_LONG).show();

        this.tvBoylam.setText(String.valueOf(location.getLongitude()));
        this.tvEnlem.setText(String.valueOf(location.getLatitude()));

    }
    else{

        Toast.makeText(MainActivity.this,"LOKASYON BİLGİLERİ BOŞ",
                Toast.LENGTH_SHORT).show();

    }


}

private class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location location) {
        String message = String.format(
                "New Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude()
        );
        Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
    }

    public void onStatusChanged(String s, int i, Bundle b) {
        Toast.makeText(MainActivity.this, "Provider status changed",
                Toast.LENGTH_LONG).show();
    }

    public void onProviderDisabled(String s) {
        Toast.makeText(MainActivity.this,
                "Provider disabled by the user. GPS turned off",
                Toast.LENGTH_LONG).show();
    }

    public void onProviderEnabled(String s) {
        Toast.makeText(MainActivity.this,
                "Provider enabled by the user. GPS turned on",
                Toast.LENGTH_LONG).show();
    }

}



}

Как я могу получить местоположение без нулевых значений?

1 Ответ

0 голосов
/ 04 февраля 2019

это не ошибка, а просто политика Google.Метод getLastKnowLocation () возвращает последнее местоположение, полученное службой Google.Как сказано в документации Google:

Объект местоположения может быть пустым в следующих ситуациях:

  • Местоположение отключено в настройках устройства.Результат может быть нулевым, даже если последнее местоположение было ранее извлечено, поскольку отключение местоположения
    также очищает кэш.
  • Устройство никогда не записывало свое местоположение, что может быть в случае нового устройства или устройства, котороебыл восстановлен до заводских настроек.
  • Службы Google Play на устройстве были перезапущены, и нет активного клиента провайдера Fused Location Provider, который запросил местоположение после перезапуска служб.

Вот почему, если вы переключитесь с Google Maps на свое приложение, вы сможете получить последнее местоположение.Чтобы получить фактическую позицию без передачи из приложения в другое, вам необходимо внедрить новый клиент и запросить обновления местоположения самостоятельно.Для получения дополнительной информации см. Получение обновлений местоположения .

Надеюсь, я прояснил все ваши сомнения.В противном случае, не стесняйтесь писать :) 1022 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...