【发布时间】:2021-08-28 23:07:08
【问题描述】:
我正在开发一个应用程序,它需要到目前为止在系统上运行的应用程序的信息。是否有检索此类信息的 API/方法?
【问题讨论】:
标签: android
我正在开发一个应用程序,它需要到目前为止在系统上运行的应用程序的信息。是否有检索此类信息的 API/方法?
【问题讨论】:
标签: android
您无法检测到 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.
}
}
您也可以使用此方法检查应用是否在前台运行
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;
}
【讨论】:
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);
}
getApplicationLabel
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;
}
【讨论】:
u.dateStamp()?
您可以使用ActivityManager 类获取有关正在运行的进程的信息。
【讨论】: