2013-12-10 5 views
0

У меня проблема с установщиком location android. По какой-то причине он останавливается и убивается.Служба определения местоположения Android убита

Начнем с самого начала. У меня есть активность, которая запустит GPS.

private void CheckEnableGPS() { 
    LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    //  String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     startGPS(); 
    } else { 
     buildAlertMessageNoGps(); 
    } 

} 

private void startGPS() 
{ 
    Toast.makeText(GPSActivity.this, "GPS Enabled", Toast.LENGTH_LONG).show(); 
    getApp().startGPSMonitor(); 
} 

Сначала я привязал GPSService к своему приложению.

bindService(new Intent(this, GpsService.class), mGpsServiceConnection, Context.BIND_AUTO_CREATE); 

Теперь я просто запустить службу, а не связывать его

startService(new Intent(this, GpsService.class)); 

Класс GPSService:

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d(MobileConnectorApplication.APPLICATION_TAG, "Started GPS Service"); 
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, THIRTY_SECONDS, 0, this); 
    } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, THIRTY_SECONDS, 0, this); 
    } 
} 

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

@Override 
public void onLocationChanged(Location location) { 
    MobileConnectorApplication app = ((MobileConnectorApplication) getApplication()); 
    Location oldLocation = app.getLastGpsLocation(); 

    if (isBetterLocation(location, oldLocation)) { 
     updateLocation.latitude = (float) location.getLatitude(); 
     updateLocation.longitude = (float) location.getLongitude(); 
     updateLocation.user = app.getLoggedInUser(); 

     try { 
      updateLocation.execute(); 
      app.setLastGpsLocation(location); 
     } catch (IOException e) { 
      Log.e(MobileConnectorApplication.APPLICATION_TAG, "GPSSERVICE - Sending action failed", e); 
     } catch (HttpException e) { 
      Log.d(MobileConnectorApplication.APPLICATION_TAG, "GPSSERVICE - Httpexception", e); 
     } 
     notifyBroadCastListeners(location); 
    } 
} 

мне это нужно бежать 24/7, обновлять каждые 30 секунд , Не говорите о потреблении батареи или так, потому что это не проблема для меня. Я попытался объявить wakelock, который создается в событии oncreate этой службы. Это, похоже, не помогло. Я действительно читал, что у должностного лица-владельца должен быть свой собственный wakelock? Это правда? Нужно ли объявлять wakelock где-то еще?

Есть ли кто-нибудь, кто может помочь мне достичь этого?

Для получения дополнительной информации, я получил несколько журналов, в которых местонахождение propvider убивается. Кроме того, мое приложение перерабатывается? (Мне нужно снова войти в систему после)

13:24:24.835: D/ConnectivityService(1475): ConnectivityService FeatureUser expire(0, enableSUPL, [email protected]) 
13:24:24.835: D/ConnectivityService(1475): stopUsingNetworkFeature for net 0: enableSUPL 
13:24:24.835: D/ConnectivityService(1475): ignoring - this process has no outstanding requests 
13:25:47.453: D/TrackDroid(2341): Executing [email protected]0591dc0 
13:25:54.195: D/SntpClient(1475): request time failed: java.net.SocketTimeoutException: Try again 
13:25:54.195: D/GpsLocationProvider(1475): requestTime failed 
13:27:55.523: D/CallManager(1539): handleMessage (EVENT_SERVICE_STATE_CHANGED) 
13:27:55.796: D/StatusChecker(5014): onReceive : android.intent.action.SERVICE_STATE 
13:27:55.804: D/StatusChecker(5014): Service state changed : 0 
13:27:55.812: D/StatusChecker(5014): trySendSMS, in service : true , SMS send : false , SMSC : true 
13:27:55.828: D/MobileDataStateTracker(1475): replacing old mInterfaceName (rmnet0) with rmnet0 for hipri 
13:27:55.851: D/MobileDataStateTracker(1475): supl Received state= CONNECTED, old= CONNECTED, reason= (unspecified), apnTypeList= default,supl 
13:27:55.921: D/MobileDataStateTracker(1475): default Received state= CONNECTED, old= CONNECTED, reason= (unspecified), apnTypeList= default,supl 
13:27:55.937: W/GpsLocationProvider(1475): Unneeded remove listener for uid 1000 
13:27:55.937: D/GpsLocationProvider(1475): stopNavigating 
13:27:55.937: V/GpsLocationProvider(1475): reportStatus status: 2 
13:27:55.937: D/GpsLocationProvider(1475): send an intent to notify that the GPS has been enabled or disabled 
13:27:55.960: V/GpsLocationProvider(1475): reportStatus status: 2 
13:27:55.984: D/ProgramMonitor(4740): onReceive -no 
13:27:56.015: V/GpsLocationProvider(1475): reportStatus status: 2 
13:27:56.085: I/Launcher(1549): onResume() ended 
13:27:56.132: I/Launcher(1549): onPause() 
13:27:56.414: D/dalvikvm(1475): GC_CONCURRENT freed 1616K, 40% free 6385K/10503K, external 3094K/3852K, paused 12ms+27ms 

ответ

0

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

Для этого есть несколько решений: вы можете использовать startForgraound(), чтобы предотвратить его переработку. Или вы можете прослушивать системные события для запуска вашего сервиса. Например, когда пользователь открывает устройство, когда пользователь ставит устройство на заряд или что-то еще.

+0

Возможно, это произошло. Благодаря! – Robin

Смежные вопросы