如何在后台获取 运行 个应用程序名称?
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 库以获取更多信息和可能的更新
例如,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 库以获取更多信息和可能的更新