почему мой GPS "зависает"? - PullRequest
       4

почему мой GPS "зависает"?

0 голосов
/ 11 октября 2011

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

Он отлично работает, когда я иду, и я нажимаю кнопку «Получить GPS», которая берет широту и долготу из моего параметра местоположения, который я получаю из

    GPSActivity.getGPS();
    loc_listener = GPSActivity.loc_listener;
     locationManager = (LocationManager)
     getSystemService(LOCATION_SERVICE);
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
     0, 0, loc_listener);
    location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Однако на заднем плане иногда говорят, что я все еще в своей квартире, хотя я отсутствовал 3 часа! Почему мой слушатель местоположения не обновляется, даже если он включается для поиска нового местоположения каждые 10 минут?

Спасибо

package com.cellphone;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class GPSActivity extends Activity{
    public static LocationListener loc_listener = null;

    public static void getGPS() {
        if (loc_listener == null) {
            loc_listener = new LocationListener() {

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub

                }
            };
        }

    }

    public static void killGPS(LocationManager locationManager) {
        if (locationManager != null && loc_listener != null) {
            locationManager.removeUpdates(loc_listener);
        }
    }

}

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Я бы рекомендовал использовать только Activity для отображения информации и использовать в фоновом режиме сервис, который содержит частичную блокировку пробуждения, поэтому он продолжает работать, даже если устройство пытается перейти в спящий режим. Затем используйте широковещательный приемник в Activity, чтобы получать обновления от службы с указанием местоположения.

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

Проверьте эту ссылку:
http://developer.android.com/reference/android/os/PowerManager.html

Вы должны иметь разрешение:

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

А для блокировки пробуждения:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");

//you would acquire in onStart() or on your getGPS() or somewhere else if you like.
mWakeLock.acquire();
// you would release in your onStop() or your onDestroy() or on your killGPS()
mWakeLock.release();
0 голосов
/ 11 октября 2011

для опроса местоположения, вот простой и рабочий пример: https://github.com/commonsguy/cwac-locpoll

Вы можете сохранить состояние своего приложения, добавив функцию в контекст приложенияСкажем так, средство определения местоположения может знать о состоянии приложения и пропустить действие gps, если приложение не активно.

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