Непрерывное обновление местоположения в фоновом режиме

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

public class LocationService extends Service implements LocationListener, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { LocationRequest mLocationRequest; LocationClient mLocationClient; @Override public void onCreate() { //creating log file in mobile appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service created:", com.example.locationservice.Constants.LOG_FILE); mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(5*1000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // mLocationRequest.setFastestInterval(5*1000); mLocationClient = new LocationClient(getApplicationContext(), this,this); mLocationClient.connect(); } @Override public void onStart(Intent intent, int startId) { int start = Service.START_STICKY; appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Started:", com.example.locationservice.Constants.LOG_FILE); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { // TODO Auto-generated method stub appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Connection to client failed", com.example.locationservice.Constants.LOG_FILE); this.stopSelf(); } @Override public void onConnected(Bundle arg0) { // TODO Auto-generated method stub Log.i("info", "Location Client is Connected"); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client Connectd:", com.example.locationservice.Constants.LOG_FILE); //checking for locaton enabled or not if(Util.isLocationEnabled(getApplicationContext())){ //checking for internet available or not if(Util.isInternetOn(getApplicationContext())){ mLocationClient.requestLocationUpdates(mLocationRequest, this); }else{ Log.i("info", "Internet not available"); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE); this.stopSelf(); } }else{ Log.i("info", "Location Acess disabled"); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Acess disabled", com.example.locationservice.Constants.LOG_FILE); this.stopSelf(); } Log.i("info", "Service Connect status :: " + isServicesConnected()); } @Override public void onDisconnected() { // TODO Auto-generated method stub appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client DisConnectd:", com.example.locationservice.Constants.LOG_FILE); Log.i("info", "Location Client is DisConnected"); } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub double latitude = location.getLatitude(); double longitude = location.getLongitude(); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Changed:", com.example.locationservice.Constants.LOG_FILE); Log.i("info", "Latitude :: " + latitude); Log.i("info", "Longitude :: " + longitude); if(Util.isInternetOn(getApplicationContext())){ //sending location details sendLocation(location); }else{ this.stopSelf(); Log.i("info", "Internet not available"); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE); } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onDestroy() { // TODO Auto-generated method stub Log.i("info", "Service is destroyed"); mLocationClient.removeLocationUpdates(this); appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Destroyed:", com.example.locationservice.Constants.LOG_FILE); super.onDestroy(); } private boolean isServicesConnected() { // Check that Google Play services is available int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationService.this); // If Google Play services is available if (ConnectionResult.SUCCESS == resultCode) { return true; } else { return false; } } } 

Но onLocationChanged вызывает только тогда, когда я открываю приложение встроенной карты. В противном случае он не обновляет данные о местоположении. Я начал эту службу с активности, используя службу аварийной сигнализации. alarmManager запускает каждую минуту. Может кто-нибудь сказать мне, почему onLocationChanged не звонит непрерывно.

Заранее спасибо.

Попробуй это:

 @Override public void onCreate() { //creating log file in mobile appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service created:", com.example.locationservice.Constants.LOG_FILE); mLocationClient = new LocationClient(getApplicationContext(), this,this); } 

Замените свой onStart на:

 @Override public int onStartCommand(Intent intent, int flags, int startId) { mLocationClient.connect(); } 

а также:

 @Override public void onConnected(Bundle arg0) { mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(5*1000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationClient.requestLocationUpdates(mLocationRequest, this); } 

Вызовите свою услугу:

 startService(yourServiceIntent); 

Вы также можете проверить мой код здесь

Intereting Posts
Как использовать привязку данных и Kotlin в Android Studio 3.0.0 Трассировка стоп-каротажа и сбоя, не отображаемая в Android Studio Android не создает правила для создания lib Пользователь не имеет права на эту покупку в покупке приложения версии3 Разработка кросс-платформенного мобильного приложения Обнаруживать слушателя в месяц прокрутки в андроид раз квадрат Как автоматически форматировать текстовое представление динамически в соответствии с длиной текста в android? Как предотвратить события щелчка на теле документа (возможно, ошибка в Кордове?) Предупреждение: не удается отсканировать исполняемый раздел для Cortex-A8 erratum, поскольку он не имеет символов отображения Вкладка Swipe – NullPointerException – Android Изменить цвет границы edittext Уведомлять о другой деятельности предпочтения изменено Обновление Android-приложения в Google Play – Консоль разработчика Android Как распечатать APK через командную строку в Windows Android-браузер по умолчанию не прокручивает веб-страницу