Intereting Posts
Как запустить диспетчер загрузки из широковещательного приемника? Запрос Youtube блокируется Unit Тестирование приложения для Android в Bamboo, Hudson или на любых серверах CI Gradle 4.0 Невозможно найти подходящую конфигурацию Retrofit v2 Вызывает ли Call.cancel () обратный вызов? Обнаруживать, если Android-приложение установлено на устройстве с помощью мобильной веб-страницы – PHP и JS Определите, является ли устройство смартфоном или планшетом? Изменение BOOTCLASSPATH в Android-приложении Просмотр андроидного таймера (как и индикатор выполнения), обновление с цветами в холсте Android Studio – IBus до 1.5.11 может привести к проблемам ввода. Подробнее см. IDEA-78860 Android – несколько пользовательских версий одного и того же приложения Android – Как настроить собственный шрифт для всего приложения Что означает «m» в java-коде Android – стандартная высота панели инструментов Используя invalidateOptionsMenu () с системой входа (Android)

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 .