MyTetra Share
Делитесь знаниями!
Энергоэффективный способ определять местоположение в Android
26.02.2019
17:47
Текстовые метки: android, location, местоположение, координаты, географические, gps
Раздел: Компьютер - Программирование - Java - Java в Android

В Android есть несколько способов получить текущие координаты устройства: по GPS, по сотовым вышкам, по Wi-Fi-роутерам. С каждым из них можно работать двумя способами: либо попросить систему определить текущее местоположение и вызвать по окончании операции заданный колбэк, либо спросить ОС о том, какие координаты были получены в последний раз (например, в результате запросов на определение местоположения от других приложений).

Второй способ гораздо более энергоэффективный. Он быстрый, абсолютно незаметен для пользователя (не приводит к появлению иконки в строке состояния) и не жрет аккумулятор. И его очень просто использовать:


Location getLastLocation(Context context) {

LocationManager lManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);


android.location.Location locationGPS = lManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

android.location.Location locationNet = lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);


long GPSLocationTime = 0;

if (null != locationGPS) { GPSLocationTime = locationGPS.getTime(); }


long NetLocationTime = 0;

if (null != locationNet) { NetLocationTime = locationNet.getTime(); }


Location loc;

if ( 0 < GPSLocationTime - NetLocationTime ) {

loc = locationGPS;

} else {

loc = locationNet;

}


if (loc != null) {

return loc;

} else {

return null;

}

}


Данная функция спрашивает систему о последних координатах, полученных с помощью определения местоположения по сотовым вышкам и по GPS, затем берет самые свежие данные и возвращает их в форме объекта Location.

Далее можно извлечь широту и долготу и записать их в файл внутри каталога приложения:


Location loc = getLastKnownLocation(context) // Видимо, имеется в виду getLastLocation()


String locationFile = context.getApplicationInfo().dataDir + "/location"


try {

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(locationFile, Context.MODE_PRIVATE));

outputStreamWriter.write(loc.getLatitude() + " " + loc.getLongitude);

outputStreamWriter.close();

}

catch (IOException e) {}


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования