#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 телефона?