|
|||||||
Энергоэффективный способ определять местоположение в Android
Время создания: 26.02.2019 17:47
Текстовые метки: android, location, местоположение, координаты, географические, gps
Раздел: Компьютер - Программирование - Java - Java в Android
Запись: xintrea/mytetra_syncro/master/base/1551192457af9d4edxxj/text.html на raw.github.com
|
|||||||
|
|||||||
В 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) {} |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|