谷歌似乎终于关闭了所有获取当前前台应用程序包的大门。
在 Lollipop 更新后,getRunningTasks(int maxNum)
由于这个答案,我使用这个代码来获取前台应用程序包,因为 Lollipop:
final int PROCESS_STATE_TOP = 2;
RunningAppProcessInfo currentInfo = null;
Field field = null;
try {
field = RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception ignored) {
}
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appList = am.getRunningAppProcesses();
for (RunningAppProcessInfo app : appList) {
if (app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
app.importanceReasonCode == 0 ) {
Integer state = null;
try {
state = field.getInt( app );
} catch (Exception ignored) {
}
if (state != null && state == PROCESS_STATE_TOP) {
currentInfo = app;
break;
}
}
}
return currentInfo;
Android 5.1.1 及更高版本(6.0 Marshmallow)似乎也被杀死getRunningAppProcesses()
了。它现在返回您自己的应用程序包的列表。
UsageStatsManager
我们可以使用此处描述的新UsageStatsManager
API,但它不适用于所有应用程序。某些系统应用程序会返回相同的包
com.google.android.googlequicksearchbox
AccessibilityService(2017 年 12 月:将被 Google 禁止使用)
一些应用程序使用AccessibilityService
(如此处所示),但它有一些缺点。
是否有另一种获取当前正在运行的应用程序包的方法?