如何在后台应用程序中运行应用程序名称?

时间:2018-05-05 20:11:57

标签: java android background-process

例如,Instagram应用程序正在运行。我希望在我的后台运行应用程序中运行应用程序名称。

1 个答案:

答案 0 :(得分:0)

没有默认的方法,你需要外部库来实现这个功能。我已经在我的应用程序中使用 jaredrummler android库实现了这一次。一个简单的用法如下所示

  

添加到草图

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

创建包装器类模型

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

...
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 ;
     }

     ...

}
  

在课堂上使用

...
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 库以获取更多信息和可能的更新