在API 23之前,可以使用ActivityManager来获取堆栈顶部的Activity。以下是一个示例代码,它从任务堆栈中获取顶部Activity的包名:
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
String packageName = componentInfo.getPackageName();
请注意,getRunningTasks()方法需要android.permission.GET_TASKS权限。
然而,自API 21以来,Google引入了新的安全模型,限制了应用程序的能力。因此,如果您的应用程序运行在API 23或更高版本上,则不能直接使用上述方法来检索活动。相反,您需要使用以下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
UsageStatsManager usm = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List appStats = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (appStats != null && appStats.size() > 0) {
UsageStats appStat = appStats.get(0);
String packageName = appStat.getPackageName();
}
}
在这种情况下,您需要android.permission.PACKAGE_USAGE_STATS权限才能够查询应用程序使用统计信息。