如果用户正在使用应用,那么如何停止显示通知?

时间:2014-02-07 13:21:02

标签: java android android-notifications

我正在设计一个使用通知的Android应用程序 在此之前,我正在使用全屏活动,因此如果收到通知,则在完整视图中我没有收到任何警报。
现在我正在使用启用通知的空白活动 当我已经进入应用程序时(例如Skype),我不想显示通知 或者,我想在闪过后立即取消它们 怎么做到这一点?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以为所有活动定义超类并跟踪应用的状态。如果所有活动都处于停止状态 - 应用程序在后台,否则 - 在前台。在超级活动的onStart()onStop()方法中,您可以增加和减少可见活动的数量。

public class SuperActivity extends Activity {
    private static int sVisibleActivitiesCount;

    @Override
    public void onStart(){
        super.onStart();
        sVisibleActivitiesCount++;
    }

    @Override
    public void onStop(){
        super.onStart();
        sVisibleActivitiesCount--;
    }

    public static boolean isAppInForeground() {
        return sVisibleActivitiesCount > 0;
    }
}

现在,您可以在某处检查应用程序状态,如果SuperActivity.isAppInForeground返回true,则不会创建通知。

第二种方法是使用ActivityLifecycleCallbacks(min API 14)来监视活动生命周期并在一个地方跟踪应用程序状态,而不需要为所有活动提供超类。如果您的应用具有minSdkVersion =“14”,我宁愿使用此方法。

答案 1 :(得分:1)

您可以尝试获取正在运行的进程列表,并检查前台中的那个是否是您的应用程序。

private boolean isAppInForeground() {

    ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> mRunningProcesses = mActivityManager
            .getRunningAppProcesses();
    Iterator<RunningAppProcessInfo> i = mRunningProcesses.iterator();
    while (i.hasNext()) {
        RunningAppProcessInfo runningAppProcessInfo = i.next();

        if (runningAppProcessInfo.uid == getApplicationInfo().uid && runningAppProcessInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) 
            {
                return true;
           }
       }
    return false;
}