Intereting Posts
Отправка объекта в виде Посылки (с файловыми дескрипторами) с помощью исключения причин Как я могу манипулировать стеком активности Android? Телефонная книга, как загрузить и открыть файл pdf в приложении для Android Есть ли трансляция для изменения объема? «MinifyEnabled» против «shrinkResources» – какая разница? И как получить сохраненное пространство? Как отличить приложение Android от управляемого профиля и обычного профиля? Не удается запустить AVD (эмулятор) Android: Mediaplayer: как использовать SurfaceView или медиаплеер для воспроизведения видео в правильном размере Android Studio – невозможно найти действительный путь сертификации для запрошенной цели Android Dx warning: Игнорирование атрибута InnerClasses для анонимного внутреннего файла jar-файла Шаги преобразования проекта C ++ opencv на компьютере с opencv android Будет ли токен FCM периодически изменяться, как идентификатор регистрации GCM? Запретить закрытие экрана активности Android на внешнем прикосновении Как я на самом деле BOND устройства? Eclipse / Android не может генерировать R-файлы для любого проекта

Android LocationLister, реализованный в IntentService, никогда не выполняет метод OnLocationChanged ()

Я написал IntentService, который реализует интерфейс LocationListener. Служба должна отправить сообщение, когда метод OnLocationChanged () был вызван в первый раз. Но OnLocationChanged () никогда не вызывается. Вот мой код:

public class MyIntentService extends IntentService implements LocationListener { private int result = Activity.RESULT_CANCELED; protected Messenger mMessenger; protected LocationManager mLocationManager = null; public MyIntentService() { super("LocationService"); } @Override protected void onHandleIntent(Intent intent) { Log.i(TAG, "Got starting intent: " + intent.toString()); Bundle extras = intent.getExtras(); if (extras != null) { Messenger = (Messenger) extras.get("MESSENGER"); if(mLocationManager == null) { mLocationManager = (LocationManager) MyIntentService.this .getSystemService(Context.LOCATION_SERVICE); } String provider = LocationManager.GPS_PROVIDER; boolean gpsIsEnabled = mLocationManager.isProviderEnabled(provider); if(gpsIsEnabled) { Context con = MyIntentService.this; mLocationManager.requestLocationUpdates(provider, 0, 0, MyIntentService.this); } else { Log.i(TAG, "NO GPS!"); } } @Override public void onLocationChanged(Location location) { Log.i(TAG, "Got Location"); Log.i(TAG, "Got Messenger: " + mMessenger.toString() + "\nand Location Manager: " + mLocationManager.toString()); if(mMessenger != null && mLocationManager != null){ result = Activity.RESULT_OK; Message msg = Message.obtain(); msg.arg1 = result; msg.obj = location; mLocationManager.removeUpdates(MyIntentService.this); try { mMessenger.send(msg); } catch (RemoteException e) { Log.i(TAG, "Exception caught : " + e.getMessage()); } } } @Override public void onProviderDisabled(String provider) {} @Override public void onProviderEnabled(String provider) {} @Override public void onStatusChanged(String provider, int status, Bundle extras) {} } 

У кого-то есть идея?

Я написал IntentService, который реализует интерфейс LocationListener.

Это не очень хорошая идея. IntentService не должен делать ничего, что живет после onHandleIntent() .

Служба должна отправить сообщение, когда метод OnLocationChanged () был вызван в первый раз. Но OnLocationChanged () никогда не вызывается.

Это неудивительно, так как служба будет уничтожена миллисекундой или около того после ее создания на основе вашей реализации.

Если ваша цель состоит в том, чтобы иметь постоянное текущее местоположение в любое время, попробуйте Little Fluffy Location Library . Или, рассмотрите мой LocationPoller .