0

Je sais qu'il y a beaucoup de questions sur ce problème et j'ai vu presque tous, mais je ne peux pas résoudre mon problème. J'ai un service qui appelle l'activité principale en utilisant le gestionnaire de diffusion locale, je reçois une certaine valeur de ce service et puis je les mets en chaîne et envoyer dans d'autres services qui ont besoin de les utiliser. un de ces services appelé en diffusion locale mais deux d'entre eux dans un bouton d'écoute, j'utilise le gestionnaire d'alarme pour les exécuter à chaque fois 1 minute, aussi j'utilise satrtforeground() dans le premier service qui appelle l'activité principale, mais étrangement dans certains appareils écran descend ou utilisateur nettoyer l'application de l'arrière-plan (de la pile) les services ne fonctionnent pas. J'espère que vous pouvez me aider, Mercimes services ne fonctionnent pas lorsque l'application est complètement fermée

public class ServiceURL extends Service { 


public static final String Service = ServiceURL.class.getName() + "LocationBroadcast"; 




@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

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


    Notification note = new Notification(0, null, System.currentTimeMillis()); 
    note.flags |= Notification.FLAG_NO_CLEAR; 
    startForeground(42, note); 


    // some codee 

     Intent i = new Intent(Service); 
     i.putExtra("Sobh",prayerTimes.get(0).toString()); 
     i.putExtra("Sunrise",prayerTimes.get(1).toString()); 
     i.putExtra("Zohr",prayerTimes.get(2).toString()); 
     i.putExtra("Asr",prayerTimes.get(3).toString()); 
     i.putExtra("Sunset",prayerTimes.get(4).toString()); 
     i.putExtra("Maghreb",prayerTimes.get(5).toString()); 
     i.putExtra("Isha",prayerTimes.get(6).toString()); 

     sendBroadcastMessage(i); 



    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 

} 

private void sendBroadcastMessage(Intent intent) { 

     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 


} 

MainActivity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

// some code 
      LocalBroadcastManager.getInstance(this).registerReceiver(
        new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 



          Sobh = intent.getStringExtra("Sobh"); 
          Sunrise = intent.getStringExtra("Sunrise"); 
          Zohr = intent.getStringExtra("Zohr"); 
          Sunset = intent.getStringExtra("Sunset"); 
          Maghreb = intent.getStringExtra("Maghreb"); 
          Asr = intent.getStringExtra("Asr"); 
          Isha = intent.getStringExtra("Isha"); 

          Log.d("Sobh in main", Sobh); 

           Intent i = new Intent(getApplicationContext(), ServiceAzan.class); 

           i.putExtra("SOBH", Sobh.substring(0, 5)); 
           i.putExtra("ZOHR", Zohr.substring(0, 5)); 
           i.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
           i.putExtra("ASR", Asr.substring(0, 5)); 
           i.putExtra("ISHA", Isha.substring(0, 5)); 
           PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, i, 0); 
           AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
           alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),60 * 1000, pintent); 
           // String timestamp = intent.getStringExtra("Date"); 

          SobhText.setText(Sobh.substring(0, 5)); 
          SunriseText.setText(Sunrise.substring(0, 5)); 
          ZohrText.setText(Zohr.substring(0, 5)); 
          SunsetText.setText(Sunset.substring(0, 5)); 
          MaghrebText.setText(Maghreb.substring(0, 5)); 
          AsrText.setText(Asr.substring(0, 5)); 
          IshaText.setText(Isha.substring(0, 5)); 

          Log.d("sobh text .....", SobhText.getText().toString()); 


          Log.d("change value before",beforepick+""); 
          Log.d("change value after",afterpick+""); 

          TimeChanging.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 

             // some code 

              Intent intentBA = new Intent(getApplicationContext(), ServiceSetTime.class); 
              Intent sms = new Intent(getApplicationContext(), SmsService.class); 

              intentBA.putExtra("SOBH", Sobh.substring(0, 5)); 
              intentBA.putExtra("ZOHR", Zohr.substring(0, 5)); 
              intentBA.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
              intentBA.putExtra("ASR", Asr.substring(0, 5)); 
              intentBA.putExtra("ISHA", Isha.substring(0, 5)); 

              PendingIntent pintentBA = PendingIntent.getService(getApplicationContext(), 0, intentBA, 0); 
              AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
              alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30 * 1000, pintentBA); 

              sms.putExtra("SOBH", Sobh.substring(0, 5)); 
              sms.putExtra("ZOHR", Zohr.substring(0, 5)); 
              sms.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
              sms.putExtra("ASR", Asr.substring(0, 5)); 
              sms.putExtra("ISHA", Isha.substring(0, 5)); 

              PendingIntent pintentsms = PendingIntent.getService(getApplicationContext(), 0, sms, 0); 
              AlarmManager alarmsms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
              alarmsms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 1000, pintentsms); 

              // some code 
           }); 

         } 
        }, new IntentFilter(ServiceURL.Service) 
      ); 


       } 
      }); 
     } 


} 


@Override 
protected void onResume() { 
    super.onResume(); 
    startService(new Intent(this, ServiceURL.class)); 
    } 

@Override 
protected void onPause() { 
    super.onPause(); 
    // stopService(new Intent(this, ServiceURL.class)); 

} 

REMARQUE: en raison de l'édition de code ici peut-être une parenthèse pas vrai, les ignorer Merci

Répondre

0

Assurez-vous que vous n'êtes pas mettre fin au processus de l'application tout en sortant. Utiliser

finishAffinity(); 

Pour quitter l'application.

+0

pas: ((toujours le même, bien sûr, comme je l'ai dit dans certains appareils ne fonctionnent pas tous, par exemple dans le dispositif de huwaie – hdiz

0

Cela dépend du modèle de l'appareil. Les différents appareils se comportent différemment si vous supprimez l'application de la pile de l'application.

Certains périphériques peuvent arrêter le processus d'application et aucun gestionnaire d'alarmes ne sera démarré, mais un autre périphérique ferme uniquement l'activité mais le processus est actif.

essayez d'utiliser https://stackoverflow.com/a/16698105/2930077 pour déterminer processus est vivant ou non

+0

donc, ce est-ce que vous voulez dire que c'est impossible? – hdiz

+0

Oui, si un utilisateur arrête l'application de manière indépendante, l'application ne peut plus être exécutée jusqu'à ce que l'utilisateur s'exécute manuellement ou vous pouvez essayer d'enregistrer ACTION_BOOT_COMPLETED ou écouter une notification. aider à exécuter à nouveau votre application – user2930077

+0

lorsque l'écran et le trackpad activés le même problème est survenu et il est libre de l'intervention de l'utilisateur – hdiz