Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 4.06.2014 | нет комментариев
Долго я прочёсывал интернет в поисках простого решения, как мне в план добавить 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" />
 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB