Разбудите GPS и сетевой локатор, прежде чем он будет проверен IntentService

У меня проблема, аналогичная заданному здесь вопросу: Отправка сообщения обработчику в мертвом потоке при получении местоположения от IntentService

Я поместил LocationListener в IntentService, который, как я слышал, является плохим местом для его размещения, поскольку прослушиватель уничтожается после завершения onHandleIntent().

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

Служба IntentService запускается каждую минуту и ​​проверяет наличие обновленного местоположения каждые 5–30 минут. Есть ли способ настроить requestLocationUpdates, который я могу вызвать перед фактической проверкой местоположения?

12-31 14:09:33.664: W/MessageQueue(3264): Handler (android.location.LocationManager$ListenerTransport$1) {41403330} sending message to a      Handler on a dead thread
12-31 14:09:33.664: W/MessageQueue(3264): java.lang.RuntimeException: Handler (android.location.LocationManager$ListenerTransport$1) {41403330} sending message to a Handler on a dead thread
12-31 14:09:33.664: W/MessageQueue(3264): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:196)
12-31 14:09:33.664: W/MessageQueue(3264): at android.os.Handler.sendMessageAtTime(Handler.java:473)
12-31 14:09:33.664: W/MessageQueue(3264): at android.os.Handler.sendMessageDelayed(Handler.java:446)
12-31 14:09:33.664: W/MessageQueue(3264): at android.os.Handler.sendMessage(Handler.java:383)
12-31 14:09:33.664: W/MessageQueue(3264): at android.location.LocationManager$ListenerTransport.onLocationChanged(LocationManager.java:193)
12-31 14:09:33.664: W/MessageQueue(3264): at android.location.ILocationListener$Stub.onTransact(ILocationListener.java:58)
12-31 14:09:33.664: W/MessageQueue(3264): at android.os.Binder.execTransact(Binder.java:338)
12-31 14:09:33.664: W/MessageQueue(3264): at dalvik.system.NativeStart.run(Native Method)

Запланированная служба

public class ScheduledService extends IntentService {

    private LocationManager lm;
    LocationListener locationListener;

    public ScheduledService() {
        super("ScheduledService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

        locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                lm.removeUpdates(this);
            }

            public void onStatusChanged(String provider, int status, Bundle extras) {}

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}
        };

        if(isNetworkAvailable()) {

            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

            try {
                Location lastKnownLocation = getBestLocation();
                double lat = lastKnownLocation.getLatitude();
                double lon = lastKnownLocation.getLongitude();

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

person Rawr    schedule 23.10.2013    source источник
comment
Вы нашли решение? Если да, то не могли бы вы ответить на свой вопрос?   -  person Sarp Kaya    schedule 30.01.2014
comment
Да, извините, я обычно стараюсь обновлять свои вопросы. Я опубликую ответ.   -  person Rawr    schedule 31.01.2014


Ответы (1)


ОБНОВЛЕНИЕ: я не совсем уверен, но полагаю, что выбрал другой вариант и переместил LocationListener из IntentService, потому что он уничтожается после завершения onHandleIntent().

Я только что понял, что не знаю, как правильно написать этот фрагмент кода, поэтому я пошел и поискал библиотеку, которая делала то, что мне было нужно. Вот отправная точка. Я добавил его в закладки, потому что нашел его полезным: Хороший способ получить местоположение пользователя в Android

person Rawr    schedule 30.01.2014