2016-09-26 13 views
0

通知の「X」をクリックしてフォアグラウンドサービスを停止することができます。通知をクリックしたときにAppが表示されるかどうかを確認する

フォアグラウンドサービスが停止すると、他のアクティビティが表示されます。

「X」ボタンをクリックしたときにアプリが表示されるのか背景に表示されるのかがわかりません。アプリが表示されたら、アクティビティを変更する必要があります。

答えて

0

abをチェックしてくださいフォアグラウンドで実行されているかどうか、あなたの活動をアウト?ここに行く:

public boolean isRunning(Context ctx) { 
    try { 
    ActivityManager am = (ActivityManager) context 
      .getSystemService(Context.ACTIVITY_SERVICE); 
    // The first in the list of RunningTasks is always the foreground 
    // task. 
    RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0); 
    String foregroundTaskPackageName = foregroundTaskInfo.topActivity 
      .getPackageName();// get the top fore ground activity 
    PackageManager pm = context.getPackageManager(); 
    PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(
      foregroundTaskPackageName, 0); 

    String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo 
      .loadLabel(pm).toString(); 

    // Log.e("", foregroundTaskAppName +"----------"+ 
    // foregroundTaskPackageName); 
    if (!foregroundTaskAppName.equals("Your App name")) { 
     return true; 
    } 
} catch (Exception e) { 
    Log.e("isAppSentToBackground", "" + e); 
} 
return false; 
} 

> = 21

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks(); 

for (ActivityManager.AppTask task : tasks) { 
    Log.d(TAG, "stackId: " + task.getTaskInfo().stackId); 
} 
+0

APIレベルの活動は、私は2つのタスク、サービス用と活動のための1つを取得していますバックグラウンドで実行されている場合場合。アクティビティがOSによって殺されたときだけ、1つのタスクしかありません。 – sativa

+0

@sativa:はい、ここでスタックの最初のタスクが常にフォアグラウンドになるようにチェックする必要があります – Jai

+0

@sativaこのコードはAndoid API Level> = 21では使用できません[API Docs Link](https ://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks(int)) – harsh201

1

あなたの問題に対して100%保証の解決策はありません。

最も簡単なの一つは、グローバル変数で目に見える活動を追跡することです:

public void onResume(){ 
    super.onResume(); 
    App.visibleActivity = this; 
} 

public void onPause(){ 
    super.onPause(); 
    App.visibleActivity = null; 
} 

しかし、いくつかの重要なことがあります。

1)のdontは、メモリリークを防ぐために、onPauseでvisibleActivityを解放するのを忘れ

2)あなたのアプリが技術的にバックグラウンドである場合、現在のonPauseと次のonResumeの間に時間差があります

関連する問題