如果 App 是否为 运行,则在 BroadcastReceiver 中显示对话框

Show Dialog in BroadcastReceiver if App is running or not

如果应用程序已关闭或在后台 运行,但如果应用程序已打开或 运行 在前台我想直接显示对话框。

我有这个代码:

@Override
public void onReceive( Context context, Intent intent )
{
    if ( RunningHelper.isAppRunning(context, Constants.PROJECT_NAME ) )
    {
        Log.d("Running", "--------APP RUNNING");


    }
    else
    {

        Log.d("Running", "--------APP NOT RUNNING");
        showNotification();
    }
}

我的跑步助手:

 public static boolean isAppRunning(final Context context, final String packageName) {
    final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
    if (procInfos != null)
    {
        for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) {
            if (processInfo.processName.equals(packageName)) {
                return true;
            }
        }
    }
    return false;
}

问题是应用程序总是检测到 运行 onReceive(),有人知道如何正确执行吗?谢谢

实施自定义应用程序class

    public class ProjectApplication extends Application {

  public static boolean isActivityVisible() {
    return activityVisible;
  }  

  public static void activityResumed() {
    activityVisible = true;
  }

  public static void activityPaused() {
    activityVisible = false;
  }

  private static boolean activityVisible;
}

不要忘记在您的应用程序的 AndroidManifest 中进行输入 class。

为项目中的每个 Activity 添加 onPause 和 onResume,或者您可以创建一个扩展 AppCompatActivity/FragmentActivity 的 BaseActivity,并且您的所有项目 activity 都必须扩展 BaseActivity

@Override

protected void onResume() {
  super.onResume();
  ProjectApplication.activityResumed();
}

@Override
protected void onPause() {
  super.onPause();
  ProjectApplication.activityPaused();
}

收到广播后,您可以检查 activity 是在前台还是后台

@Override
public void onReceive( Context context, Intent intent )
{
    if ( ProjectApplication.activityVisible)        {
     // application is in foreground and running
    // do stuff here
    }
    else
    {
        // application is in background
    // do stuff here

    }
}