Простой способ добавить геолокацию в свой проект для Android

от автора

Долго я прочёсывал интернет в поисках простого решения, как мне в проект добавить 1 только класс и больше не беспокоиться о проблемах геолокации.
Критерии были такие:
1) решить всё в 1 классе, как можно меньше используя внешний код.
2) у пользователя должна быть всегда под рукой 1 static переменная в которой указанно его местоположение и больше ни о чём он знать не должен.

Большинство постов не отвечало на поставленный вопрос: конечно сначала нужно обратиться к сервису, потом нужно установить listner, потом вы можете посмотреть на трёхстраничный краткий пример как это делать.
В итоге я написал свой класс, с которым и хочу вас познакомить: он прост в использовании и с ним сможет справиться любой: просто добавьте его в проект и будет вам счастье.

import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle;  class MyLocationListener implements LocationListener {  	static Location imHere; // здесь будет всегда доступна самая последняя информация о местоположении пользователя. 	     public static void SetUpLocationListener(Context context) // это нужно запустить в самом начале работы программы 	{ 		LocationManager locationManager = (LocationManager)  				context.getSystemService(Context.LOCATION_SERVICE); 		 		LocationListener locationListener = new MyLocationListener();   		 		locationManager.requestLocationUpdates( 				LocationManager.GPS_PROVIDER, 				5000, 				10, 				locationListener); // здесь можно указать другие более подходящие вам параметры  		imHere = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 	}      @Override     public void onLocationChanged(Location loc) { 		imHere = loc;     }     @Override     public void onProviderDisabled(String provider) {}     @Override     public void onProviderEnabled(String provider) {}     @Override     public void onStatusChanged(String provider, int status, Bundle extras) {} } 

Итак, что же здесь есть?

Класс разделен на 3 части:
1) imHere — переменная типа Location, в которой будет всегда доступна самая последняя информация о местоположении пользователя.
2) функция SetUpLocationListener — в любом случае нам нужна будет начальная установка для того, чтобы система начала сама без нашего участия выполнять обновление переменной imHere.
3) все остальные обязательные части LocationListener, которые можно переделать по собственному желанию.

Итак, как это работает?

1) создаем класс MyLocationListener
2) копируем в него код написанный выше
3) в основной функции (например MainActivity) ближе к началу запускаем:

MyLocationListener.SetUpLocationListener(this);

или для любителей потоков

final Context mainContext = this; 		  new Thread(new Runnable() { 			    @Override 				public void run() { 			        MyLocationListener.SetUpLocationListener(mainContext); 			    } 			}).start();

4) теперь у нас всегда и в любой части нашего проекта есть переменная MyLocationListener.imHere типа Location, в которой хранится самое последнее местоположение пользователя и множество дополнительной информации, как например скорость или точность определения местоположения.

И в заключение: это принципиальный код и тут есть что улучшать. Например нужно учитывать, что первое время локация может быть не определена и imHere будет null, но это всё не скоро: сейчас у нас есть класс, который позволяет нам без лишних усилий и с минимумом знаний добавить геолокацию в свой проект.

(!) Не забудьте: в зависимости от выбранного провайдера нужно добавить в манифест соответствующее разрешение. Например используемый выше GPS_PROVIDER требует добавления следующей строчки в манифест:

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

ссылка на оригинал статьи http://habrahabr.ru/post/201648/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *