2017-08-05 1 views
0

comme indiqué dans le titre, je veux savoir s'il est possible pour le BroadcastReceiver de savoir si l'application est tuée.Android: Vérifiez si l'application est tué (glisser dans les applications récentes) dans un récepteur

J'ai essayé de accompli cela avec ActivityManager.RunningAppProcessInfo:

ActivityManager.RunningAppProcessInfo myProcess = new ActivityManager.RunningAppProcessInfo(); 
    ActivityManager.getMyMemoryState(myProcess); 
    boolean isInForeground = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND; 
    boolean isInBackground = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; 
    boolean cached = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; 
    boolean perceptile = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE; 
    boolean sleeping = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_TOP_SLEEPING; 
    boolean service = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE; 

Mais aucun de ces attributs peut me dire si mon application est encore en vie, ils ne peuvent me donner des conseils.

Normalement, j'utiliser getRunningTask (je sais qu'il est dépréciée):

ActivityManager manager = (ActivityManager) mActivity.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(100); 
    for(int i = 0; i < runningTaskInfo.size(); i++) { 
     ComponentName componentInfo = runningTaskInfo.get(i).topActivity; 
     if(componentInfo.getPackageName().equals(packageName)){ 
      return true; 
     } 
    } 

Mais cette solution je besoin d'une activité que je n'ai pas et je ne peux pas créer (Peut-être que vous avez une idée)?

Donc ma question: Est-il possible de savoir si votre application est tuée ou non?

Merci

Répondre

1

Créer un nouveau service comme celui-ci,

public class FinalizingOperationsService extends Service { 

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

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      Log.d("FOService", "Service Started"); 
      return START_NOT_STICKY; 
     } 

     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      Log.d("FOService", "Service Destroyed"); 
     } 

     @Override 
     public void onTaskRemoved(Intent rootIntent) { 
      Log.e("FOService", "Service Ends"); 
      // write server updation code here 
      // after completing code perform stopself() to stop this service; 
     } 
    } 

Et définir ce service dans le fichier manifeste comme celui-ci,

<service android:name=".FinalizingOperationsService" android:stopWithTask="false"/> 

Et puis créer une classe d'application dans votre projet et commencer le service dans cette classe

public class MyApplication extends Application 
    { 

     @Override 
     protected void attachBaseContext(Context context) { 
      super.attachBaseContext(context); 
     } 


     @Override 
     public void onCreate() 
     { 
      super.onCreate(); 
      Intent itent = new Intent(this, FinalizingOperationsService.class); 
      startService(itent); 
     } 
    } 

Explication: La méthode onTaskRemoved() du service est appelée lorsque l'application est supprimée ou détruite. Dans cette méthode, vous pouvez donc effectuer vos opérations finales. J'espère que cela vous aidera.