android - 如何检查android应用程序是在后台还是前台还是已终止?

标签 android android-activity background

我想检查我的应用程序状态,现在我很容易使用下面的代码将我的应用程序置于后台或前台,但我不知道如何检查应用程序是否被终止或终止,任何人都可以帮助解决这个问题。使用下面的代码,我在后台或前台检查应用程序。

public static boolean isAppIsInBackground(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }
        return isInBackground;
    }

最佳答案

这是完美的代码并检查 onStop 方法

private boolean isAppIsInBackground(Context context) {
    boolean isInBackground = true;
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        isInBackground = false;
                    }
                }
            }
        }
    } else {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equals(context.getPackageName())) {
            isInBackground = false;
        }
    }
    return isInBackground;
}

关于android - 如何检查android应用程序是在后台还是前台还是已终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212215/

相关文章:

Android 清除 Activity 之间的返回堆栈

android - 允许 AsyncTask 操作不同 Activity 类中的值

Android PendingIntent 将您带到一个已经存在的 Activity ?

java - 在 Android 上使用 opengles 播放 YUV 视频后 Activity 困惑

android - Recyclerview 和 Detailsfragment : elevation, 层次结构之间的共享元素转换,bringToFront

java - Android:位置更新在后台一段时间后(20-30 分钟)停止

css - 背景图像未显示在 css 中

c# - 如何在 C# 中更改 UWP Apps 中按钮的背景颜色?

android - 暂停时更新 MediaPlayer 开始位置

android - 登录 ADT 布局编辑器