确定单击通知时App是否可见

时间:2016-09-26 07:37:10

标签: android notifications

我有一个前台服务,可以通过点击通知中的“X”来停止。

当前台服务停止时,应显示其他活动。

问题是,当点击“X”-Button时,我不知道应用程序是可见的还是在后台。当应用程序可见时,应更改活动。

2 个答案:

答案 0 :(得分:1)

您的问题没有100%保证解决方案。

最简单的一个方法是跟踪全局变量的可见活动:

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

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

但有一些重要的事情:

1)不要忘记在onPause上释放visibleActivity以防止内存泄漏

2)当您的应用在技术上处于后台时,当前onPause与下一个onResume之间存在时间差距

答案 1 :(得分:0)

检查您的活动是否在前台运行?你走了:

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);
}