安卓棉花糖6.0,检查后台运行的应用程序

3
在Marshmallow中,即使应用程序不在后台和前台,我还是会得到“应用程序正在运行”的提示。 我使用的代码是:
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
for (int i = 0; i < appProcesses.size(); i++) {
        if (appProcesses.get(i).processName.equals("com.alive.moraribapuapp")) {
            Log.d(TAG, "com.alive.moraribapuapp is true(running)");

            return true;
        } else {
            Log.d(TAG, "com.alive.moraribapuapp is false(Not running)");
            return false;
        }
    }

即使在Marshmallow系统中,应用程序关闭后仍然会返回真值。

你确定它已经关闭了吗?请检查设置菜单并查看是否启用了“强制停止”选项。如果是这样,它仍在运行且没有关闭。 - Ori Lentz
Ori Lintz,但所有应用程序都启用了强制停止,实际上我正在使用它来在应用程序在前台时隐藏通知,例如WhatsApp。 - Vinay
不,所有正在运行的应用程序都已启用强制停止。此外,您正在检查应用程序是否在运行,这与检查其是否在前台不同。在后台运行的应用程序仍然非常活跃和运行。如果您想知道您的应用程序是否在前台,则需要知道当前是否有任何Activity可视(即,如果最后一个Activity生命周期为onStartonResume,则没有调用onDestroyonPause等)。 - Ori Lentz
rashad.z,问题已解决,我们必须手动检查aap是否在前台。请查看答案。 - Vinay
1个回答

4

rashad.z,问题已解决,我们需要手动检查应用程序是否在前台。

 private boolean isAppOnForeground(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;
        }
    }

    Log.d("MyGcmListenerService", "" + isInBackground);
    return isInBackground;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接