如何检查应用程序是在后台还是前台运行

问题描述 投票:0回答:1

我有一个

Service
,即使应用程序完全关闭,它也始终在后台运行。在这项服务中,我有一个
BroadcastReceiver
让我知道设备是否正在充电:

  @Override
    public void onBatteryStatusChanged(BatteryUtils.Status status) {
        if (status.getStatus() == BatteryUtils.BatteryStatus.CHARGING) {
             if(!AppUtils.isAppRunning(getPackageName()))
                   LogUtils.dTag(Constants.TAG, "APP SHOULD LAUNCH NOW");
        }
    }

public static boolean isAppRunning(final String pkgName) {
    ActivityManager am = (ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
    if (am != null) {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(Integer.MAX_VALUE);
        if (taskInfo != null && taskInfo.size() > 0) {
            for (ActivityManager.RunningTaskInfo aInfo : taskInfo) {
                if (aInfo.baseActivity != null) {
                    if (pkgName.equals(aInfo.baseActivity.getPackageName())) {
                        return true;
                    }
                }
            }
        }
        List<ActivityManager.RunningServiceInfo> serviceInfo = am.getRunningServices(Integer.MAX_VALUE);
        if (serviceInfo != null && serviceInfo.size() > 0) {
            for (ActivityManager.RunningServiceInfo aInfo : serviceInfo) {
                if (pkgName.equals(aInfo.service.getPackageName())) {
                    return true;
                }
            }
        }
    }
    return false;
}

我的目标:

插入充电器后即启动应用程序,但前提是该应用程序尚未启动。

我的问题:

当我检查应用程序是否正在运行时,它总是返回

TRUE
,即使应用程序已关闭。出现此行为的原因是该服务在后台运行,导致整个应用程序被视为正在运行。

java android service android-broadcast
1个回答
0
投票

您正在检查您的

Service
是否正在运行,当然它正在运行,因此此方法将始终返回
true
。使用
getRunningTasks()
并非用于此目的,并且可能不可靠,尤其是对于较新的 Android 版本。

您应该做的是将当前“充电”状态存储在共享首选项中。每当您的

BroadcastReceiver
被触发时,请将新的“充电”状态与您存储在共享首选项中的状态进行比较。如果它们不同并且新状态是“正在充电”,那么您可以启动您的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.