Я хочу сделать следующее: сервис, который постоянно прослушивает обновления местоположения gps (да: JUST gps), не запрашивая их активно - то есть это приложение не должно потреблять дополнительных ресурсов с точки зрениявремя работы от батареи или время процессора, пока другие приложения не будут запрашивать / получать обновления местоположения GPS.Тогда мое приложение должно выполнять некоторые функции.после этого он должен вернуться в «спящий режим», ожидая, пока какое-либо другое приложение запросит следующее исправление позиции gps ...
Я уже читал эту статью http://android -developers.blogspot.de / 2011/06 / deep-dive-into-location.html но это, похоже, имеет другую направленность.на самом деле, я немного растерялся ... как бы точно использовать этот пассивный провайдер местоположения?Я не могу заставить это работать.
Мой код до сих пор: у меня есть эта (удаленная) служба, которая регистрирует слушателя местоположения:
public class MyService extends Service
{
LocationManager locationManager;
@Override
public IBinder onBind(Intent intent)
{
return serviceBinder;
}
private final IMyService.Stub serviceBinder = new IMyService.Stub()
{};
@Override
public void onCreate()
{
super.onCreate();
Log.d(Config.LOGTAG, "service started");
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, new GPSLocationListener());
}
@Override
public void onDestroy()
{
super.onDestroy();
Log.d(Config.LOGTAG, "service destroyed");
}
public class GPSLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location)
{
Toast.makeText(getBaseContext(), "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude(), Toast.LENGTH_LONG).show();
Log.d(Config.LOGTAG, "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude());
}
@Override
public void onProviderDisabled(String arg0)
{
Log.d(Config.LOGTAG, ":(");
}
@Override
public void onProviderEnabled(String arg0)
{
Log.d(Config.LOGTAG, ":)");
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
Log.d(Config.LOGTAG, ":/");
}
}
}
К сожалению, это не работает вообще:служба запускается в соответствии с журналами, но когда я, например, открываю карты Google с включенным gps и получаю там определение местоположения, слушатель местоположения не «уведомляется» (т.е. ничего не регистрирует)
Как это сделатьправо