Я делаю приложение, которое должно использовать текущее местоположение пользователя во многих действиях. Я действительно не хочу внедрять клиента местоположения в каждом действии. Каков наилучший способ использования текущего местоположения в моем приложении? Возможно, фоновая служба? И если да, то как я могу это использовать? Любой пример?Использовать текущее местоположение во многих видах деятельности Android
ответ
Во-первых, ответ на «Hemant Чанд Dungriyal "неверен. Класс наследуется от Service, но не использует никаких функций, предоставляемых компонентами Service, поэтому в основном это обычный класс, вы можете также удалить часть «extends Service»! (видимо, у меня нет репутации enoug, чтобы комментировать!)
В целом, я считаю, что для каждого клиента лучше управлять своим подключением к службе LocationProvider в android, таким образом, они могут запросить местоположение, соответствующее их потребностям. Например, если для работы требуется только приблизительное местоположение по сравнению с другим, для которого требуется последнее известное местоположение из системы по сравнению с другим, для которого требуется точное местоположение, вы не будете тратить ресурсы системы, предоставляя точное местоположение всем из них.
Но если вы знаете, что точное местоположение необходимо во всех частях вашего приложения, то использование Сервиса - это один из вариантов. Но тогда вам следует управлять жизненным циклом услуги (хотите ли вы, чтобы она была связана службой или запущена служба ?, когда создавать и когда ее уничтожать? И т. Д.). Также вам нужно знать, когда все действия закрыты, и это безопасно для отключения службы.
Альтернативой будет реализация кода в классе приложения. Вы можете инициализировать, когда первая активность нуждается в доступе к ней, а затем, когда все действия будут закрыты, вы можете закрыть ее (снова вам нужен механизм, чтобы выяснить, есть ли еще видимые действия, которые должны знать местоположение).
Для примера реализации я уверен, что вы можете найти немало, просто пойдите в Google.
Используйте ниже код, чтобы получить текущее местоположение Lat Long: -
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class GPSTracker extends Service implements LocationListener
{
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location; // location
public static double latitude; // latitude
public static double longitude; // longitude
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
// Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context)
{
this.mContext = context;
getLocation();
}
public Location getLocation()
{
try
{
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled)
{
// no network provider is enabled
}
else
{
this.canGetLocation = true;
// First get location from Network Provider
if (isNetworkEnabled)
{
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("Network", "Network");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
// System.out.println("latitude if (isNetworkEnabled) => "+latitude);
// System.out.println("longitude if (isNetworkEnabled) => "+longitude);
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
// System.out.println("latitude if (isGPSEnabled) => "+latitude);
// System.out.println("longitude if (isGPSEnabled) => "+longitude);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
@Override
public void onLocationChanged(Location location)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
}
, где вы хотите, чтобы получить широчайшие и длинный вызов ниже код: -
new GPSTracker(Activity.this);
double latitude = GPSTracker.latitude; // latitude
double longitude = GPSTracker.latitude; // latitude
Это не способ использовать службу, создавая экземпляр нового класса в каждом действии, вместо этого вы должны использовать IBinder. Также вы не указали код в onLocationChanged, последнее известное местоположение будет равно null. Это ужасный ответ. -1 – NickT
Я рекомендую последовать этот пример с помощью Google Play услуг, а затем расширение деятельности, которые нуждаются в местах с результирующей FragmentActivity: http://developer.android.com/training/location/receive-location-updates.html
Если вы публикуете вне Play Store, вы можете использовать старую Геолокацию в Android (или библиотека, использующая их), и сделать это из Приложения возможно, но базовый класс активности так же прост, что делает более понятным управление жизненным циклом и разделяет код местоположения.
не подходит ли этот подход для многопроцессорных действий, например, многократного запуска одного и того же кода в разных действиях? – techtinkerer
- 1. Сохранение данных во многих видах деятельности Android
- 2. Панель инструментов Android во всех видах деятельности
- 3. Android: Навигатор-ящик во всех видах деятельности
- 4. Обновить текущее местоположение во всех видах из NavBar locationButton
- 5. Фоновая музыка во всех видах деятельности
- 6. как использовать навигационный ящик во всех видах деятельности моего проекта
- 7. Получение GoogleAnalytics, работающего во всех видах деятельности
- 8. Android: информация о пользователе во всех видах деятельности
- 9. Как использовать данные в разных видах деятельности?
- 10. Android Tab навигация в различных видах деятельности
- 11. Уменьшить текущее местоположение android
- 12. Текущее местоположение с android
- 13. android gps текущее местоположение
- 14. Текущее местоположение в Android
- 15. Android- Текущее местоположение
- 16. Найти текущее местоположение Android 6.0
- 17. повторного дизайн заголовка интерфейса и функциональность во всех видах деятельности
- 18. панель навигации во всех видах деятельности onNavigationItemSelected случае не работает
- 19. Статические параметры не сохраняются во всех видах деятельности
- 20. ColorPrimaryDark тему андроида оленья кожа дисплей во всех видах деятельности
- 21. Как получить доступ к ящику навигации во всех видах деятельности?
- 22. Местоположение Core + позволяет использовать текущее местоположение?
- 23. Как использовать тег include для установки пастуха во всех видах деятельности Android?
- 24. Получить текущее местоположение пользователя android
- 25. Общая компоновка нижнего колонтитула во всех видах деятельности
- 26. скользящий выдвижной ящик отображается во всех видах деятельности
- 27. Лучшая практика для инициализации одних и тех же элементов во многих видах деятельности?
- 28. Доступ к объекту GoogleApiClient во всех видах деятельности
- 29. Повторное использование панели действий во всех видах деятельности
- 30. android: better Найти текущее местоположение
Мои мысли точно. – NickT