如何检查应用程序是否正在运行(Android> 5.1)?

问题描述:

下面的代码在Android 4.4上成功运行,但由于android 5.1 getRunningAppProcesses()只返回自己的进程。我如何检查应用程序是否在Android> 5.1上运行?如何检查应用程序是否正在运行(Android> 5.1)?

static boolean isRun(Context context, String pkg_name) { 
    ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); 
    if (procInfos == null) 
     return false; 
    int i; 
    for (i = 0; i < procInfos.size(); i++) { 
     ActivityManager.RunningAppProcessInfo proc = procInfos.get(i); 
     if (proc.processName.equals(pkg_name)) 
      return true; 
    } 
    return false; 
} 

使用什么来代替getRunningAppProcesses(),适用于Android 5.1及更高版本。

+4

可能重复[如何检查Android的系统版本?](https://*.com/questions/3093365/how-can-i-check-the-system-version-of- android) –

+0

问题是如何确定Android 5.1及以上版本中正在运行的进程列表?什么使用,而不是getRunningAppProcesses()? –

+0

这不是一个重复的实现问题,而不是版本检查! –

/** * 方法检查,如果应用程序在后台或不 */

public static boolean isAppIsInBackground(Context context) { 
     boolean isInBackground = true; 
     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { 
      List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
      for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
       if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
        for (String activeProcess : processInfo.pkgList) { 
         if (activeProcess.equals(context.getPackageName())) { 
          isInBackground = false; 
         } 
        } 
       } 
      } 
     } else { 
      List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
      ComponentName componentInfo = taskInfo.get(0).topActivity; 
      if (componentInfo.getPackageName().equals(context.getPackageName())) { 
       isInBackground = false; 
      } 
     } 

     return isInBackground; 
    } 

问题中加入允许AndroidManifest解决。

<uses-permission android:name="android.permission.REAL_GET_TASKS" /> 
+0

Android 5.1及更高版本的getRunningAppProcesses()返回大小= 1! –

+0

你想检查什么,你可以详细解释。 –

+0

我想检查带有pkg_name的应用程序是否正在运行。我的问题中的代码在Android 5.1中不起作用。和更高 –