2016-09-26 43 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等级> = 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

如果如果活动在我得到2项任务,一个是服务,一个是活动的后台运行。只有当活动被操作系统杀死时,只有一项任务。 – sativa

+0

@sativa:是的,这里你必须检查堆栈中的第一个任务总是在前台 – Jai

+0

@sativa由于该方法已被弃用,因此该代码不适用于Andoid API Level> = 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之间存在时间差,当您的应用在技术上处于后台时

相关问题