android - 如果应用程序正在运行,则在 BroadcastReceiver 中显示对话框

标签 android broadcastreceiver

如果应用程序关闭或在后台运行,我会尝试显示通知(如果您单击它,将打开一个带有对话框的 Activity ),但如果它是打开的或在前台运行,我想直接显示对话框。

我有这个代码:

@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(),有人知道如何正确执行吗?谢谢。

最佳答案

实现自定义应用类

    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 中进行输入。

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

@覆盖

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

    }
}

关于android - 如果应用程序正在运行,则在 BroadcastReceiver 中显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789591/

相关文章:

未填充 Android Market 引荐来源数据

android - 如何从Android中的电话号码中获取来电者的姓名

java - 从接收者通知线程

android - 如何在接到电话时暂停和播放音频流

java - Android Location.distanceBetween 和 Location.distanceTo 区别

java - Android 应用程序可以在手机上运行,​​但不能在 AVD 上运行

android - 如何获取android :launchMode attribute in program code

android - 如何使用警报管理器进行通知?

android - 如何在 intent-filter 的数据标签中指定方案特定部分?

android - 如何为小数制作编辑文本字段