我正在创建一个家庭启动器,我想与 Android 5.0 Lollipop 兼容。我想在启动器上获取最近的应用程序列表。
但由于ActivityManager.getRecentTasks()
不再适用于 API 21,我该怎么做呢?
我正在创建一个家庭启动器,我想与 Android 5.0 Lollipop 兼容。我想在启动器上获取最近的应用程序列表。
但由于ActivityManager.getRecentTasks()
不再适用于 API 21,我该怎么做呢?
String topPackageName ;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");
long time = System.currentTimeMillis();
// We get usage stats for the last 10 seconds
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*10, time);
// Sort the stats by the last time used
if(stats != null) {
SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);
}
if(mySortedMap != null && !mySortedMap.isEmpty()) {
topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
}
使用UsageStatsManager
,您可以获得当前正在运行的前台包名称。
getRecentTasks
我对 whis 感到困扰,因为 android 已经弃用了一些 API ,例如getRunningTasks
API21 以上,他们说这些方法不再适用于第三方应用程序。当我在棒棒糖上方的设备上调用这些 api 时,它只返回 null 或我的应用程序 :(。
然后我找到了一种方法来代替这些 api,只要我们可以获得应用程序的packagename
,我们几乎可以做任何我们想做的事情。Android 基于 linux,我发现了这个AndroidProcesses 。它可以/proc
用来获取 android 的应用程序pid
和processName
,processName
就是这样的广告com.xxx.xxx:remote
。注意前面:
是 packageName :)
拿到后packageName
,我想你知道该怎么做了。我想我们可以开始Service
根据进程运行后台统计最近使用的应用程序。统计时间越长,结果越准确。