Как найти мое текущее местоположение (широта долгота) одним нажатием кнопки в Android?

#android #gps #location

#Android #gps #Расположение

Вопрос:

Я видел различные фрагменты кода, которые определяют координаты с помощью различных методов, таких как onlocationupdate () или onStatusChanged ()…. мне нужен простой код, который извлекает мои текущие координаты GPS одним нажатием кнопки…

Ответ №1:

Ответ Йогсмы касается того, как получать автоматические обновления. Ссылка, на которую он ссылается, предоставляет все, что вам нужно, но вот краткая версия того, как выполнить обновление вручную:

Предполагая, что вы прочитали руководства о том, как создать кнопку, тогда вам просто нужно добавить прослушиватель для вашей кнопки, а затем заставить прослушиватель вызвать функцию для запроса вашего диспетчера местоположений. Приведенный ниже код делает все это встроенным, чтобы показать вам, как это делается, но я бы создал экземпляр LocationManager где-нибудь в другом месте (например, ваша активность), и я бы создал отдельный метод для прослушивания по щелчку, который будет вызываться для выполнения обновления.

 // getLocationButton is the name of your button.  Not the best name, I know.
getLocationButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // instantiate the location manager, note you will need to request permissions in your manifest
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        // get the last know location from your location manager.
        Location location= locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        // now get the lat/lon from the location and do something with it.
        nowDoSomethingWith(location.getLatitude(), location.getLongitude());
    }
});
  

Конечно, вам также нужно будет зарегистрировать свою активность в службе диспетчера местоположений в вашем XML-файле манифеста:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  

Комментарии:

1. Как указывает adbantej в своем ответе, вызов getLastKnownLocation () получит только последнее подходящее местоположение, что является веской причиной для создания экземпляра LocationManager в другом месте. Это даст больше времени для фактического получения действительного обновления, но этот вызов по-прежнему не дает гарантий достоверности данных. Для этого вам нужно будет использовать методы onLocationChanged () или onGPSStatusChanged методы реализованного местоположения или GPS-прослушивателя.

2. Большое спасибо за предыдущий ответ … 🙂 теперь, когда у меня есть местоположение…. как я могу отобразить то же самое на карте??? я хочу отобразить два местоположения на карте, а также путь между ними…

3. смотрите developer.android.com/guide/tutorials/views/hello-mapview.html и mobiforge.com/developing/story/using-google-maps-android для начала.

4. Большое спасибо 🙂 Приведенные выше ссылки были довольно полезными … 🙂

5. Это должен быть правильный ответ на заданный вопрос, бывают случаи, когда вы можете указать текущее местоположение только при необходимости, приведенный выше ответ предназначен для отслеживания, оба случая разные

Ответ №2:

 LocationManager mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                LocationListener mLocListener = new MyLocationListener();
                mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocListener);

public class MyLocationListener implements LocationListener{        

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

        }
        public void onProviderEnabled(String provider) {

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

        }       
    }
  

Прочитайте это подробнее http://www.javacodegeeks.com/2010/09/android-location-based-services.html

Комментарии:

1. Большое спасибо за предыдущий ответ … 🙂 теперь, когда у меня есть местоположение…. как я могу отобразить то же самое на карте??? я хочу отобразить два местоположения на карте, а также путь между ними…

Ответ №3:

Нет такого механизма, чтобы получать текущее местоположение немедленно по запросу. Поскольку вам нужно запросить Netowork или поставщика GPS, что может занять время, чтобы фактически получить местоположение.

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

Комментарии:

1. Большое спасибо за предыдущий ответ … 🙂 теперь, когда у меня есть местоположение…. как я могу отобразить то же самое на карте??? я хочу отобразить два местоположения на карте, а также путь между ними.

2. Я просто предположу здесь (я не очень хорошо разбираюсь в этом). Вам придется использовать API Google и использовать просмотр карты. Вот пример построения простой точки: developer.android.com/guide/tutorials/views/hello-mapview.html

3.Одна вещь, за которой я не слежу… Что getLastKnwonLocation() делает? Оно не делает собственный запрос, оно просто проверяет, обновило ли уже местоположение какое-то другое приложение? Я думал, что GPS телефона автоматически обновляет местоположение и getLastKnownLocation() просто получит доступ к тому, что было получено последним GPS? Вы говорите, что это может быть, stale но как это может быть stale , если он улавливает то, что говорит собственный GPS телефона?