2016-09-26 5 views
0

전경 서비스가 있습니다. 알림에서 'X'를 클릭하여 중지 할 수 있습니다.알림을 클릭 할 때 앱이 표시되는지 확인

포 그라운드 서비스가 중지되면 다른 활동이 표시되어야합니다.

문제는 "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; 
} 

API 레벨> =

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

(21) 활동이 내가이 명 작업, 서비스 용 및 활동에 대한 하나를 얻고 백그라운드에서 실행되는 경우합니다. os에 의해 활동이 죽을 때에 만 하나의 작업이 있습니다. – sativa

+0

@sativa : 예, 스택의 첫 번째 작업이 항상 전경에 있는지 확인해야합니다. – Jai

+0

@ sativa이 코드는 Andoid API 레벨> 21이므로 메소드가 더 이상 사용되지 않습니다. [API 문서 링크] (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) 그나마 메모리

누출 방지하기 위해 onPause에서 visibleActivity을 확보하는 것을 잊었다는

2) 앱이 기술적으로 배경에있을 때 현재 onPause와 다음 onResume 사이에 시간차가 있습니다.

관련 문제