如何判断我的Android服务是否在前台运行?

如何判断我的Android服务是否在前台运行?,android,Android,从特定服务的代码中,我想确定该服务是否在前台。我看了看: 特别是RunningServiceInfo.前台,但文档中说,“如果服务要求作为前台进程运行,则设置为true。” 那么我可以依靠RunningServiceInfo.前台吗?还是有别的办法 PS:我没有其他问题,我的服务运行良好。这个问题更多的是出于好奇。已经浏览了ASOP,没有看到任何东西,但也许我错过了什么 如果您有类似的问题,这可能会有帮助: …虽然我发现已接受的解决方案不完整。如果我正确理解了您的问题,并且假设前台意味着您的

从特定服务的代码中,我想确定该服务是否在前台。我看了看:

特别是RunningServiceInfo.前台,但文档中说,“如果服务要求作为前台进程运行,则设置为true。”

那么我可以依靠RunningServiceInfo.前台吗?还是有别的办法

PS:我没有其他问题,我的服务运行良好。这个问题更多的是出于好奇。已经浏览了ASOP,没有看到任何东西,但也许我错过了什么

如果您有类似的问题,这可能会有帮助:


…虽然我发现已接受的解决方案不完整。

如果我正确理解了您的问题,并且假设前台意味着您的应用程序具有某些活动,则您可以在应用程序中声明全局静态变量,例如布尔值。 在您的活动中,您可以设置:

@Override
protected void onResume() {
    super.onResume();
    bIsForeground = true;
}


@Override
protected void onPause() {
    super.onResume();
    bIsForeground = false;
}
因此,每当您的活动处于前台或“屏幕上”时,此变量应为true,这样您的服务就可以知道您的活动处于前台。

请尝试以下代码:

private boolean isActivityRunning() {
        List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
        ComponentName runningActivity = tasks.get(0).topActivity;
        return runningActivity.getPackageName().startsWith("com.mypackage");
    }
private boolean isActivityRunning(){
列表任务=activityManager.getRunningTasks(1);
ComponentName runningActivity=tasks.get(0).topActivity;
返回runningActivity.getPackageName().startsWith(“com.mypackage”);
}

我能想到的唯一一件事是检查服务的流程重要性是否表明它正在运行前台服务或前台活动:

private boolean isForegroundOrForegroundService() {
    //Equivalent of RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE on API 23
    //On prior versions to API 23, maybe the OS just uses 100 as foreground service importance?
    int IMPORTANCE_FOREGROUND_SERVICE = 125;
    return findThisProcess().importance <= IMPORTANCE_FOREGROUND_SERVICE;
}

private ActivityManager.RunningAppProcessInfo findThisProcess() {
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo proc : runningAppProcesses)
        if (proc.pid == Process.myPid())
            return proc;

    throw new RuntimeException("Couldn't find this process");
}
私有布尔值isForegroundOrForegroundService(){
//相当于在API 23上运行AppProcessInfo.IMPORTANCE\u前台\u服务
//在API 23之前的版本中,操作系统可能只使用100作为前台服务的重要性?
int重要性\前台\服务=125;

return findThisProcess()。重要性通过查看服务是否在前台运行,您试图完成什么?我遇到了一个问题,我将调用setForeground,但该服务仍然在加载时被终止。结果表明,我没有正确调用setForeground(传递它的id=0).但在我意识到这一点之前,我突然意识到我并不知道该服务在前台,只是我请求了它。因此,我寻找一种方法来确定该服务是否是前台的,但却找不到。因此我想我会将其摆成这样…好吧,它不是setForeground its
startForeground()
使用该选项,您需要创建一个显示在通知栏中的通知对不起,您的意思是startForeground()而不是setForeground()。是的,我知道它需要通知,谢谢。请检查此处