
在Android 5.0及之后的版本中,获取当前栈顶应用程序的包名需要通过UsageStatsManager服务。首先,打开应用使用权限设置界面,意图设置如下:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
之后,获取UsageStatsManager实例并查询最近一天的应用使用记录:
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
接下来,将这些应用使用记录按最后使用时间排序:
SortedMap mySortedMap = new TreeMap();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
若排序后的映射表不为空,则取出最后使用的应用程序包名:
if (mySortedMap != null && !mySortedMap.isEmpty()) {
topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
Log.e("TopPackage Name", topPackageName);
}
对于Android 5.0以下的版本,则可通过ActivityManager查询当前栈顶任务信息,获取包名如下:
else {
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
ActivityManager.RunningTaskInfo taskInfo = tasks.get(0);
topPackageName = taskInfo.topActivity.getPackageName();
}
以上方法可以有效获取当前栈顶应用程序的包名,适用于不同Android版本的设备。详情