如何知道用户是否打开了应用程序

How to know if the user has the application open

我正在处理推送通知,我需要知道当推送通知到达时,用户是否将应用程序置于前台以便显示此类推送通知或执行其他操作。

我正在使用从 ParsePushBroadcastReceiver 扩展的自定义接收器。

如果有任何想法请帮助我,在此先感谢。

创建一个单独的 class 如下 -

      public class MyVisibilityManager {

private static boolean mIsVisible = false;

public static void setIsVisible(boolean visible) {
    mIsVisible = visible;
}

public static boolean getIsVisible() {
    return mIsVisible;
}

}

创建一个基础activity class,在其onresume 中将mIsVisible 设置为true,并将onPause 设置为false。在您的广播接收器中,您可以检查 mVisible 是 true 还是 false 并执行相关操作。

创建一个应用程序 class,如下所示。如果您已有,请包括以下内容

public class MyApp extends Application {
    private boolean isAppInForeground;

    public static boolean isAppInForeground(Context context){
        MyApp app = (MyApp) context.getApplicationContext();
        return app.isAppInForeground;
    }

    public static void setAppInForeground(Context context, boolean isInForeground){
        MyApp app = (MyApp) context.getApplicationContext();
        app.isAppInForeground = isInForeground;
    }
}

像这样创建一个 BaseActivity 并从此 BaseActivity 扩展您的所有活动

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onPause() {
         super.onPause();
         MyApp.setAppInForeground(this, false);
    }

    @Override
    protected void onResume() {
        super.onResume();
        MyApp.setAppInForeground(this, true);
    }
}

在通知广播接收器的 onReceive() 中,您现在可以检查应用是否在前台

@Override
public void onRecieve(Context context, Intent intent){
   if(MyApp.isAppInForeground(context)){
       //app in foreground
   }
}