如何在后台获取 运行 个应用程序名称?

How can I get running application names in background?

例如,Instagram 在后台 运行。我想在 java.

中的 background 运行 application 上获取 运行 应用程序名称

没有默认方法可以执行此操作,您将需要外部库来实现此功能。我通过使用 jaredrummler android 库在我的应用程序中实现了一次。一个简单的用法如下图

Add to gradle

dependencies {
    ...
    compile 'com.jaredrummler:android-processes:1.1.1'
}

Create a wrapper Class Model

如果您想存储有关 运行 进程的基本信息以便在列表视图或其他地方使用它,您可以创建如下所示的包装器模型

...
import android.graphics.drawable.Drawable;

public class RunningApplication {
     public String processName, pid = "" ;
     public long startTime = 0 ;
     public Drawable processIcon = null ;

     public RunningApplication(String name, long start, String pid, Drawable icon) {
        this.processName = name ;
        this.startTime = start ;
        this.pid = pid ;
        this.processIcon = icon ;
     }

     public getProcessName() {
        return processname ;
     }

     ...

}

Use in you class

...
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import com.jaredrummler.android.processes.AndroidProcesses;
import com.jaredrummler.android.processes.models.AndroidAppProcess;
import com.jaredrummler.android.processes.models.Stat;
import com.jaredrummler.android.processes.models.Statm;

class YourClass extends Activity {
    List<RunningApplication> runningApplicationList = new ArrayList<>();

    ...
    public void getRunningApps() {
        List<AndroidAppProcess> processes = AndroidProcesses.getRunningAppProcesses();
        PackageManager pm = getPackageManager();
        for (AndroidAppProcess pro : processes) {
           try {
                String proccessname = pro.name;
                Stat stat = pro.stat();
                int pid = stat.getPid();
                int parentProccessId = stat.ppid();
                long startTime = stat.stime();
                int policy = stat.policy();
                char state = stat.state();

                Statm statm = pro.statm();
                long totalSizeofProccess = statm.getSize();
                long residentSetSize = statm.getResidentSetSize();

                PackageInfo packageInfo = pro.getPackageInfo(basecontext, 0);

                //get the app name
                String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                //Get the app icon
                Drawable appIcon = packageInfo.applicationInfo.loadIcon(pm);
                //Add it to your list of running app
                RunningApplication ra = new RunningApplication(appName,startTime,pid,appIcon);
                runningApplicationList.add(ra);
           } catch (Exception ex) {
                Log.e("APPNAME.CONTEXT",e.getMessage());
           }
        }
    }

}
...

注意: 我使用上面的代码已经一年多了,但当时它工作得很好,而且没有经过测试。您可以搜索 jaredrummler 库以获取更多信息和可能的更新