问题描述
如果我的应用正在运行,我想确保第 3 方应用始终在运行。 但是,如果第 3 方应用程序已经在后台打开,我不想重新启动它。 所以我需要检查第 3 方应用是否已经在运行。
我知道在 Lolipop 之后这将不再起作用:
private ArrayList<String> getRunningApps(){
ArrayList<String> runningApps = new ArrayList<>();
final ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
for(ActivityManager.RunningAppProcessInfo rapi:procInfos){
runningApps.add(rapi.processName);
}
return runningApps;
}
我已经尝试使用以下代码通过 UsageStatsManager 获取正在运行的应用程序:
UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService(USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,time - 3000,time);
if(stats != null) {
SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);
Log.d("RunningAppProcessInfo","Package name : "+usageStats.getPackageName());
}
}
经过一些研究,我发现这似乎是解决方案。但是无法知道使用情况统计中的应用当前是否正在运行,因为即使我关闭应用,它们仍然会出现在此列表中。
UsageStats 有一个 .lastTimeUsed() 函数,但即使应用程序当前在后台运行,它也不会提供当前时间。
如果绝对需要,也欢迎具有 root 权限的解决方案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)