Запуск LocationManager как службы Android

То, что я пытаюсь сделать, – это получить сообщение c2dm, запустить службу, которая запрашивает местоположение для «х» времени, а затем передает это местоположение на наш сервер. Сообщение c2dm запускает сервис правильно, и местоположение GPS включается, но оно никогда не обновляется. Он просто сидит там на протяжении определенного времени (в настоящее время 12 секунд) в потоке и ничего не делает. Я использую тот же код где-то еще в своем приложении (а не как услугу), и он отлично работает. Что я делаю не так?

Это запустит службу при получении сообщения c2dm.

context.startService(new Intent(context, ServicePingLocation.class)); 

Это код для самой службы. Все, что когда-либо вызывалось, это «onCreate» и «onStart».

 public class ServicePingLocation extends Service implements LocationListener { private final String DEBUG_TAG = "[GPS Ping]"; private boolean xmlSuccessful = false; private boolean locationTimeExpired = false; private LocationManager lm; private double latitude; private double longitude; private double accuracy; @Override public void onLocationChanged(Location location) { Log.d(DEBUG_TAG, "onLocationChanged"); latitude = location.getLatitude(); longitude = location.getLongitude(); accuracy = location.getAccuracy(); } @Override public void onProviderDisabled(String provider) { Log.d(DEBUG_TAG, "onProviderDisabled"); Toast.makeText( getApplicationContext(), "Attempted to ping your location, and GPS was disabled.", Toast.LENGTH_LONG).show(); } @Override public void onProviderEnabled(String provider) { Log.d(DEBUG_TAG, "onProviderEnabled"); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 10f, this); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { Log.d(DEBUG_TAG, "onStatusChanged"); } @Override public void onCreate() { Log.d(DEBUG_TAG, "onCreate"); } @Override public void onDestroy() { Log.d(DEBUG_TAG, "onDestroy"); } @Override public IBinder onBind(Intent intent) { Log.d(DEBUG_TAG, "onBind"); return null; } @Override public void onStart(Intent intent, int startid) { Log.d(DEBUG_TAG, "onStart"); lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 10f, this); lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 300f, this); Log.d(DEBUG_TAG, lm.toString()); new SubmitLocationTask(ServicePingLocation.this).execute(); } private void locationTimer() { new Handler().postDelayed(new Runnable() { // @Override @Override public void run() { locationTimeExpired = true; } }, 12000); } private class SubmitLocationTask extends AsyncTask<String, Void, Boolean> { /** application context. */ private Context context; private Service service; public SubmitLocationTask(Service service) { this.service = service; context = service; } @Override protected void onPreExecute() { locationTimer(); // Start 12 second timer } @Override protected void onPostExecute(final Boolean success) { if (success && xmlSuccessful) { lm.removeUpdates(ServicePingLocation.this); onDestroy(); } else { if (!GlobalsUtil.DEBUG_ERROR_MSG.equals("")) Toast.makeText(getBaseContext(), GlobalsUtil.DEBUG_ERROR_MSG, Toast.LENGTH_SHORT) .show(); GlobalsUtil.DEBUG_ERROR_MSG = ""; } } @Override protected Boolean doInBackground(final String... args) { try { DateFormat df = null; df = new SimpleDateFormat("M/d/yy h:mm a"); Date todaysDate = new Date();// get current date time with // Date() String currentDateTime = df.format(todaysDate); while ((accuracy > 100f || accuracy == 0.0) && !locationTimeExpired) { // We just want it to sit here and wait. } return xmlSuccessful = SendToServerUtil.submitGPSPing( 0, longitude, latitude, accuracy, currentDateTime); } catch (Exception e) { return false; } } } 

}

[Изменить] Исправлена ​​проблема, с которой я столкнулся. Код действительно работал. Я добавил сетевого провайдера, скорректировал метод onDestroy (), чтобы остановить службу, и изменил время, используемое для захвата сигнала GPS.

Спасибо за совет, CommonsWare

Исправлена ​​проблема, с которой я столкнулся. Код действительно работал. Я добавил сетевого провайдера, скорректировал метод onDestroy (), чтобы остановить службу, и изменил время, используемое для захвата сигнала GPS.

Спасибо за совет, CommonsWare

Intereting Posts
Служба Android для управления MediaPlayer Android Bluetooth LE – характеристики чтения, не работающие на Samsung Нужно пояснить синтаксис инициализации объекта Java «Предупреждение: не размещайте классы контекста Android в статических полях; Это утечка памяти (а также прерывает Instant Run) " Проблемы с скриптом wifi для Android Настройка высоты и ширины настраиваемого диалога Как удалить текст в фокусе EditText в android? Android: профиль GATT с низким энергопотреблением Bluetooth Как разбирать xml, хранящийся в строковой переменной? Где мы получаем ответ xml от веб-службы, которая имеет аутентификацию? Вращение андроида Использование surfaceView для захвата видео Как конвертировать PDF-страницу в изображение на Android? Как сделать программу Android «wait» Проблема Progaurd «Предупреждение: игнорирование атрибута InnerClasses для анонимного внутреннего класса» Почему изменение цвета кнопки «По умолчанию» заставляет его выглядеть RECTANGLE в Android?