我在应用程序中工作,需要每晚进行同步。我使用闹钟管理器,在我想要的时间呼叫广播接收器。问题是,如果应用程序在前台运行,为了避免丢失数据,我无法进行同步。所以我需要知道广播接收器中的应用程序是否在前台运行以取消此同步。
我尝试了stackoverflow中的解决方案:
Checking if an Android application is running in the background
但在BroadcastReceiver中此参数始终为false,而在Activites中为true。
有人能告诉我是哪个问题吗?我在做什么?
真的谢谢!

最佳答案

试着这样希望这对你有用

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (isAppForground(context)) {
            // App is in Foreground
        } else {
            // App is in Background
        }
    }

    public boolean isAppForground(Context mContext) {

        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(mContext.getPackageName())) {
                return false;
            }
        }

        return true;
    }

}

添加此权限
<uses-permission android:name="android.permission.GET_TASKS" />

关于android - 如何在BroadcastReceiver中知道App是否在前台运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23561823/

10-10 06:26