2014-01-02 2 views
1

У меня есть служба, которая проверяет веб-API на некоторую информацию каждые 15 минут, и уведомление вступает в силу. Теперь, когда я нажимаю кнопку выхода из системы, я выполняю stopService, чтобы остановить работу , Я не вижу его в моих работающих приложениях в своих настройках, и я считаю, что он в настоящее время не работает. Но все равно я получаю уведомления каждые 15 минут. Вот моя услуга.Служба продолжает работать даже после вызова stopService

@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    intent = new Intent(BROADCAST_ACTION); 
    i1 = new Intent(this, BGService.class); 
    Notification note = new Notification(0, null, System.currentTimeMillis()); 
    note.flags |= Notification.FLAG_NO_CLEAR; 

    startForeground(1337, note); 
    handler = new Handler(); 

    preferences = getSharedPreferences(pref_data, Context.MODE_PRIVATE); 
    driverPassword = preferences.getString("driverPassword",""); 
    carrierId = preferences.getString("carrierId",""); 
    cctid = preferences.getString("CCTID",""); 
    shipment = preferences.getString("shipment",""); 

    try 
    { 
     JSONObject shipmentObject = new JSONObject(shipment); 
     shipmentID = shipmentObject.getString("ShipmentId"); 
    } 
    catch(Exception e) 
    { 

    } 

    powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
       "MyWakeLock"); 


    handler.removeCallbacks(sendWakeLock); 
    handler.postDelayed(sendWakeLock, 60000); // 1 second 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return Service.START_NOT_STICKY; 
} 

private Runnable sendWakeLock = new Runnable() { 
     public void run() {  
      wakeLock.acquire(); 
      checkShipments(); 
      handler.postDelayed(this, 900000); 
     } 
    }; 

private void checkShipments() 
{ 
    shipment = preferences.getString("shipment",""); 

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

    StrictMode.setThreadPolicy(policy); 
    String authData = "Basic " + Base64.encodeToString((cctid+ ":" + driverPassword).getBytes(), Base64.NO_WRAP); 
    String URL = "http://dev.landstarcapacityplus.com/MobileServices/api/Shipments?CCTID=" + cctid; 
    authData = "Basic " + Base64.encodeToString((cctid + ":" + driverPassword).getBytes(), Base64.NO_WRAP); 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet(URL); 
    httpget.setHeader("Authorization", authData); 
    HttpResponse response = null; 
    try { 
     response = httpclient.execute(httpget); 
     StatusLine sl2 = response.getStatusLine(); 
      int statCode2 = sl2.getStatusCode(); 
      entityShipment = EntityUtils.toString(response.getEntity()); 
      JSONObject shipments = new JSONObject(entityShipment); 
      Log.i("Tag", "Checked API for shipments"); 
      Log.i("Status Code", String.valueOf(statCode2)); 
      if (statCode2 == 200) { 
       try { 
        if(!entityShipment.equals(null) && !entityShipment.equals("") && !entityShipment.equals("[]") && !shipments.getString("ShipmentId").equals("0")) 
        { 
         if(shipment.equals("")) 
         { 
          Log.i("New Shipment", String.valueOf(statCode2)); 
          if(preferences.getString("isBackground","").equals("True") && !preferences.getString("isAccepted","").equals("True")) 
           sendNotificationToDevice("You have a new shipment"); 

          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putString("isDriverLogin", "True"); 
          editor.putString("driverPassword", driverPassword); 
          editor.putString("carrierId", carrierId); 
          editor.putString("CCTID", cctid); 
          editor.putString("shipment", entityShipment); 
          editor.putString("isAccepted", ""); 
          editor.putString("newshipment", ""); 
          editor.putString("shipmentStatus", ""); 
          editor.putString("lastGpsUpdate", ""); 
          editor.commit(); 
          sendBroadcast("new", entityShipment); 
         } 
         else 
         { 

          Log.i("Reassigned Shipment", String.valueOf(statCode2)); 
          JSONObject storedShipment = new JSONObject(shipment); 

          if(!shipments.getString("ShipmentId").equals(storedShipment.getString("ShipmentId"))) 
          { 
           if(preferences.getString("isBackground","").equals("True")) 
           { 
            if(preferences.getString("isAccepted","").equals("True")) 
             sendNotificationToDevice("GPS has been disabled. You have been assigned to a new shipment"); 
            else 
             sendNotificationToDevice("You have been assigned to a new shipment"); 
           } 

           SharedPreferences.Editor editor = preferences.edit(); 
           editor.putString("isDriverLogin", "True"); 
           editor.putString("driverPassword", driverPassword); 
           editor.putString("carrierId", carrierId); 
           editor.putString("CCTID", cctid); 
           editor.putString("shipment", shipment); 
           editor.putString("newshipment", entityShipment); 
           editor.putString("shipmentStatus", ""); 
           editor.putString("lastGpsUpdate", ""); 
           editor.commit(); 
           stopService(i1); 
           sendBroadcast("new", entityShipment); 

          } 
          else 
          { 
           if(!preferences.getString("isAccepted","").equals("True")) 
           { 
            if(preferences.getString("isBackground","").equals("True")) 
            { 
             sendNotificationToDevice("You have a new shipment"); 
            } 
           } 
           SharedPreferences.Editor editor = preferences.edit(); 
           editor.putString("shipment", entityShipment); 
           editor.commit(); 
          } 


         } 
        } 
        else 
        { 
         if(!shipment.equals("")) 
         { 
          Log.i("Removed shipment", String.valueOf(statCode2)); 
          if(preferences.getString("isBackground","").equals("True")) 
           sendNotificationToDevice("Your shipment has been removed"); 

          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putString("isDriverLogin", "True"); 
          editor.putString("driverPassword", driverPassword); 
          editor.putString("carrierId", carrierId); 
          editor.putString("CCTID", cctid); 
          editor.putString("shipment", ""); 
          editor.putString("isAccepted", ""); 
          editor.putString("newshipment", ""); 
          editor.putString("isRemoved", "True"); 
          editor.putString("shipmentStatus", ""); 
          editor.putString("lastGpsUpdate", ""); 
          editor.commit(); 
          stopService(i1); 
          sendBroadcast("removed", entityShipment); 
         } 
        } 
       } 
       catch (Exception e) { 
       } 
      } 
      else 
      { 
      } 
    } 
    catch (Exception e) 
    { 
    } 
} 

@SuppressWarnings("deprecation") 
private void sendNotificationToDevice(String message) 
{ 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     int icon = R.drawable.ic_launcher; 
     CharSequence tickerText = message; 
     long when = System.currentTimeMillis(); 

     Notification notification = new Notification(icon, tickerText, when); 
     Context context = getApplicationContext(); 
     CharSequence contentTitle = "Landstar"; 
     CharSequence contentText = message; 
     Intent intent; 
     if(preferences.getString("isBackground","").equals("True")) 
      intent= new Intent(context, StartActivity.class); 
     else 
      intent= new Intent(context, LandstarPage.class); 

     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     //PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Notification.FLAG_AUTO_CANCEL); 
     notification.defaults |= Notification.DEFAULT_SOUND; 
     notification.defaults |= Notification.DEFAULT_VIBRATE; 

     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 

     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     mNotificationManager.notify(1111, notification); 
} 

private void sendBroadcast(String status, String shipment) 
{ 
    intent.putExtra("status", status); 
    intent.putExtra("shipment", shipment); 
    sendBroadcast(intent); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

Вот как я его останавливаю.

stopService(i1); 

Вот цель. Вы можете искать его.

i1 = new Intent(this, BGService.class); 

Я включил все свои методы и все методы, которые вы, ребята, видите. У вас есть идеи о том, что вызывает это? Благодаря!

+0

Не удалось ли вы зарегистрировать сообщение «Остановленное обслуживание» в методе onDestroy() службы и посмотреть, если он регистрируется? –

ответ

1

Выпуск:

I'm not seeing it on my running applications on my settings and I believe it is not currently running 

Решение:

Да, ваш Service был остановлен, но Thread все еще работает.

Просто переопределить метод onDestroy() вашего Service, как описано ниже:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    handler.removeCallbacks(sendWakeLock); 

} 

Я надеюсь, что это будет полезно !!

+0

О да! Я полностью забыл об этом! Спасибо друг! – ljpv14

+0

Я рад помочь :-) –

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