2014-02-20 7 views
0

Я пытаюсь остановить свое состояние обслуживания и остановить его, если он запущен. Даже я использую How to check if a service is running on Android?android: проверьте, работает ли служба, не работает

Но после остановки мой сервис i remak, что он всегда бежит. Вот мой код:

public class Sauvegarde_Mail extends Activity{ 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sauvauto_layout_boitemail); 
    final Button byActiver = (Button)findViewById(R.id.btactiver); 
    Button byDesactiver = (Button)findViewById(R.id.btdesactiver); 

    byActiver.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
       BoitedialogMailEdit(); 
      } 
    }); 

    byDesactiver.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
       if(isMyServiceRunning()==true){ 
       stopService(new Intent(getApplicationContext(), MyServiceSauvAutoMail.class));} 
       byActiver.setEnabled(true); 
       Toast.makeText(getApplicationContext(),"Processus arreté",Toast.LENGTH_LONG).show(); 

      }    
    }); 
} 

private Boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (MyServiceSauvAutoMail.class.getName().equals(service.service.getClassName())) { 
      Log.e("i","Bjr"); 
      return true; 
     } 
    } 
    return false; 
} 

public void BoitedialogMailEdit(){ 
    AlertDialog.Builder Builder = new AlertDialog.Builder(this); 
    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.dialog_layout3, (ViewGroup) findViewById(R.id.layout_root)); 
    final EditText adrmail = (EditText) layout.findViewById(R.id.adrmail); 
    Builder.setView(layout); 

    Builder.setPositiveButton("VALIDER", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
      mail = adrmail.getText().toString(); 
      final Button byActiver = (Button)findViewById(R.id.btactiver); 
      Intent intent2 = new Intent(getApplicationContext(), MyServiceSauvAutoMail.class); 
      startService(intent2); 
      dialog.dismiss(); 
      Toast.makeText(getApplicationContext(),"Processus démarré.",Toast.LENGTH_LONG).show(); 
      byActiver.setEnabled(false); 
      } 
     }); 
    AlertDialog dialog = Builder.create(); 
    dialog.show(); 
} 
} 

ответ

0

Вам не нужно, чтобы проверить, является ли ваш Service работает или нет, просто вызовите stopService() на него. Он вернет true, если был такой Service бег, false в противном случае. Из reference:

Возвращает: Если есть служба, соответствующие данному Намерение, которое уже запущен, то он останавливается и верно возвращается; else false .

Аналогично, startService() не запускается несколько Services если вызвано несколько раз.

Возвраты: Если служба запущена или уже запущена, возвращается Имя компонента фактической службы, которая была запущена; иначе, если служба не существует, возвращается null.

+0

По-моему, остановка службы в моем сервисном менеджере устройств. Но я замечаю, что он все еще работает. Поскольку служба отправляет почту автоматически – user3274646

+0

Тогда что-то не работает должным образом. Проверьте значения результата ('boolean's) и посмотрите, будет ли это ожидаемое значение или нет. – nKn

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