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