Nano Hash - криптовалюты, майнинг, программирование

Прослушиватель местоположения Android не работает

Я хотел бы получить текущее местоположение устройства и открыть Google Maps следующим образом:

  if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new MyLocationListener();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);


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




private class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location loc) {

        longitude = loc.getLongitude();
        latitude = loc.getLatitude();

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + latitude + "," + longitude + "&daddr=55.877526, 26.533898"));
        startActivity(intent);
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}

Но этот код не работает: слушатель почему-то игнорируется.

Почему и как это исправить?


  • Почему вы создаете прослушиватель местоположения как LocationListener locationListener = new MyLocationListener();, а не как MyLocationListener locationListener = new MyLocationListener(); 13.11.2016

Ответы:


1

"Почему..."

Поскольку requestLocationUpdates() является асинхронной операцией, а результат (местоположение) возвращается в обратном вызове onLocationChanged(). Место доступно не сразу.

"...и как это исправить?"

Переместите туда свой код намерения карты Google:

@Override
public void onLocationChanged(Location loc) {

    longitude = loc.getLongitude();
    latitude = loc.getLatitude();

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + latitude + "," + longitude + "&daddr=55.877526, 26.533898"));
    startActivity(intent);

}
13.11.2016
  • Насколько я понимаю, вы также захотите отменить регистрацию своего прослушивателя местоположения, чтобы избежать утечки активности — см. .location.LocationListener)" rel="nofollow noreferrer">removeUpdates. 13.11.2016
  • @Markus Я изменился, и проблема все еще здесь, я пытался отладить это, и кажется, что onLocationChanged() не вызывается .. 13.11.2016
  • Получение местоположения может занять некоторое время. Установленный вами интервал обновления (в вашем случае 5000 миллисекунд) является минимальным периодом между обновлениями. Это может быть дольше по нескольким причинам. Вы также указываете минимальное расстояние 10 метров, поэтому любые изменения местоположения, в результате которых местоположение перемещается менее чем на 10 метров от того места, где оно было ранее, не будут возвращены вам. Рассмотрите возможность установки этого параметра на 0, по крайней мере, на начальном этапе. 13.11.2016
  • Если вы находитесь в помещении, GPS может просто не работать, сколько бы вы ни ждали. Просто для проверки своего кода вы также можете запросить сетевые местоположения с помощью locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener); 14.11.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..