如何检查应用程序是否在后台运行?

时间:2020-10-28 19:03:24

标签: android firebase push-notification

我正在使用Firebase向应用程序发送通知,并基于通知将用户定向到某些活动。到目前为止,我遇到的问题是,如果应用程序在后台运行,将显示的活动是主要活动,但是我无法完全管理它。

我相信这里有几个问题,但并没有完全得到我要找的答案。

任何帮助或建议都很好,谢谢

3 个答案:

答案 0 :(得分:0)

Android 10(API级别29)和更高的位置限制,说明当应用程序在后台运行时应用程序何时才能启动活动。这些限制有助于最大程度地减少对用户的干扰,并使用户更好地控制其屏幕上显示的内容。

答案 1 :(得分:0)

尝试

/**Flag to determine if the Activity is visible*/
    private static boolean activityVisible;
    private static boolean activityDestroy;

/**Is the application actually visible on the mobile screen*/
public static boolean isActivityVisible(){
    return activityVisible;
}

/**Is the application actually destroyed*/
public static boolean isActivityDestroy(){
    return activityDestroy;
}

/**Is the application actually destroyed*/
public static void activityDestroy(boolean isDestroy){
    activityDestroy = isDestroy;
}

/**Is the application actually in the background*/
public static boolean isActivityInBackground(){
    return !activityVisible;
}


/**Change the state of the Application to resume*/
public static void activityResumed() {
    activityVisible = true;
}

/**Change the state of the Application to paused*/
public static void activityPaused() {
    activityVisible = false;
}

然后进行检查

    Application app = ((Application)getApplicationContext());
    boolean visible = app.isActivityVisible();

答案 2 :(得分:0)

您可以使用importanceActivityManager字段。 在C#使用Xamarin的方法下面,但它与Java非常相似。

P.S .:如果您愿意,可以将该代码移植到Java

    public static Importance GetAppState(Context context, string packageName)
    {
        try
        {
            var manager = (ActivityManager)context.GetSystemService(Context.ActivityService);

            var processes = manager.RunningAppProcesses;

            if (processes != null)
                foreach (var process in processes)
                    if (process.ProcessName.Equals(packageName))
                        return process.Importance;
        }
        catch
        {
        }

        return Importance.Gone;
    }