Слушайте * пассивно * обновления местоположения GPS - PullRequest
4 голосов
/ 29 марта 2012

Я хочу сделать следующее: сервис, который постоянно прослушивает обновления местоположения 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 и получаю там определение местоположения, слушатель местоположения не «уведомляется» (т.е. ничего не регистрирует)

Как это сделатьправо

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Эй, я думаю, вам нужны обновленные значения долготы и широты.

перейдите по этой ссылке .. Нажмите здесь

Я уже попробовал и протестировал его на мобильном телефоне Android.. Его работает.

Примечание: Должен и должен проверить в мобильном телефоне Android с на статус GPS.Он не будет отображаться на эмуляторе затмения.Но он покажет в мобильном телефоне, попробуйте ..

Приятного просмотра.

1 голос
/ 29 марта 2012

Я бы хотел знать, не работает ли он, потому что пассивные местоположения не принимаются или код не работает.Поэтому первое, что я хотел бы сделать, это начать прослушивание сетевых и GPS-местоположений (для тестирования) и убедиться, что они прибывают.Если это так, то это говорит о том, что Карты Google используют кэшированное местоположение и не инициируют пассивную трансляцию местоположения.

Если у вас нет местоположений, вам нужно проверить свой код и заставить его работать с GPS/ сеть, прежде чем перейти к пассивным местоположениям.

0 голосов
/ 13 июля 2018

Как насчет использования Google (или Потерянный ) LocationRequest (код расширен с https://github.com/lostzen/lost/blob/master/docs/location-updates.md)

LocationRequest request = LocationRequest.create()
    .setPriority(LocationRequest.PRIORITY_NO_POWER)
    .setInterval(5000)
    .setSmallestDisplacement(10);

LocationListener listener = new LocationListener() {
  @Override
  public void onLocationChanged(Location location) {
    if (location.getProvider().equals("gps")) {
      // Do stuff
    }
  }
};

По состоянию на https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_NO_POWER, это дает

Наилучшая точность возможна при нулевом дополнительном потреблении энергии.

Местоположение не будет возвращено, если другой клиент не запросил обновления местоположения, и в этом случае этот запрос будет действовать как пассивный прослушиватель этих местоположений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...