Android 如何获取正在运行的应用程序列表?

Android 如何获取正在运行的应用程序列表?,android,Android,我正在开发一个应用程序,该应用程序需要到目前为止在系统上运行的应用程序的信息。是否有检索此类信息的API/方法?您可以使用该类获取有关运行进程的信息。您无法检测Android中的应用程序启动,但您可以获取当前打开的应用程序列表,并使用以下代码检查您要查找的应用程序是否打开: ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.Runni

我正在开发一个应用程序,该应用程序需要到目前为止在系统上运行的应用程序的信息。是否有检索此类信息的API/方法?

您可以使用该类获取有关运行进程的信息。

您无法检测Android中的应用程序启动,但您可以获取当前打开的应用程序列表,并使用以下代码检查您要查找的应用程序是否打开:

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();

for (int i = 0; i < runningAppProcessInfo.size(); i++) {
  if(runningAppProcessInfo.get(i).processName.equals("com.the.app.you.are.looking.for")) {
    // Do your stuff here.
  }
}
ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
List runningAppProcessInfo=am.getRunningAppProcesss();
对于(int i=0;i
您还可以使用此方法检查应用程序是否在前台运行

public static boolean isForeground(Context ctx, String myPackage){
    ActivityManager manager = (ActivityManager) ctx.getSystemService(ACTIVITY_SERVICE);
    List< ActivityManager.RunningTaskInfo > runningTaskInfo = manager.getRunningTasks(1); 

    ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
    if(componentInfo.getPackageName().equals(myPackage)) {
        return true;
    }       
    return false;
}
publicstaticbooleanisforment(上下文ctx,字符串myPackage){
ActivityManager=(ActivityManager)ctx.getSystemService(ActivityU服务);
列出RunningTaskInfo=manager.getRunningTasks(1);
ComponentName componentInfo=runningTaskInfo.get(0).topActivity;
if(componentInfo.getPackageName().equals(myPackage)){
返回true;
}       
返回false;
}
isSYSTEM

getApplicationLabel

public静态字符串getApplicationLabel(上下文,字符串packageName){
PackageManager PackageManager=context.getPackageManager();
List packages=packageManager.getInstalledApplications(packageManager.GET_元数据);
字符串标签=null;
对于(int i=0;i
上面的第一段代码非常适合在后台运行的应用程序。谢谢。它不是在所有情况下都有效。例如,我打开chrome并使用home按钮关闭。我可以在“应用程序历史记录”/“运行应用程序”列表中看到“Chrome”。我从那里偷走了铬。上面的代码仍然显示“Chrome”正在后台运行。@Manu可能进程仍然在那里,那么?我正在运行第一个函数,只获取我的应用程序,为什么其他应用程序没有列出?(我正在运行kiosk模式)这对运行Android 6.0及更高版本的人不起作用。使用USAGests。它在Android 7之前一直对我有效(即使你需要手动设置权限)。什么是
u.dateStamp()
?使用此代码,我得到的应用程序甚至没有运行。例如,我的工作应用程序和唯一的youtube应用程序正在运行并出现在堆栈中,但它没有在输出中显示youtube应用程序。它展示的是Insta和其他一些应用程序甚至都没有运行。在三星S4安卓5.0.1As安卓11上进行了测试,该方法不再返回所有应用程序的信息;寻找details@Sepehr安卓11有什么解决方案吗?
public static String getActiveApps(Context context) {

    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    String value = u.dateStamp(); // basic date stamp
    value += "---------------------------------\n";
    value += "Active Apps\n";
    value += "=================================\n";

    for (ApplicationInfo packageInfo : packages) {

        //system apps! get out
        if (!isSTOPPED(packageInfo) && !isSYSTEM(packageInfo)) {

            value += getApplicationLabel(context, packageInfo.packageName) + "\n" + packageInfo.packageName  + "\n-----------------------\n";

        }
    }

    return value;

    //result on my emulator

    /* 2 Ekim 2017 Pazartesi 14:35:17
    ---------------------------------
    Active Apps
    =================================
    SystemSetting
    com.xyz.systemsetting
    -----------------------
    myMail
    com.my.mail
    -----------------------
    X-plore
    com.lonelycatgames.Xplore
    -----------------------
    Renotify
    com.liamlang.renotify
    -----------------------
    Mail Box
    com.mailbox.email
    -----------------------   */


}
private static boolean isSTOPPED(ApplicationInfo pkgInfo) {

    return ((pkgInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0);
}
private static boolean isSYSTEM(ApplicationInfo pkgInfo) {

    return ((pkgInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
}
public static String getApplicationLabel(Context context, String packageName) {

    PackageManager        packageManager = context.getPackageManager();
    List<ApplicationInfo> packages       = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
    String                label          = null;

    for (int i = 0; i < packages.size(); i++) {

        ApplicationInfo temp = packages.get(i);

        if (temp.packageName.equals(packageName))
            label = packageManager.getApplicationLabel(temp).toString();
    }

    return label;
}