我在其中一个应用程序中使用getRunningTask API来查找Foreground应用程序。自从Lollipop以来,此API已被弃用。在弃用之后,我首选getRunningAppProcess API以及Importance_Foreground。我也排除了这个列表中的REASON_SERVICE和REASON_PROVIDER。我根据逻辑过滤了系统应用程序,该程序完美运行。问题是,如果应用程序A在前台,我会将应用程序B作为一个尖峰。所以,这种方法目前是有问题的。有没有其他的getRunningTask API的替代?还是我错过了目前方法中的任何简单的事情。请帮助家伙。是否有getRunningTask API的替代方案
回答
基于答案this question
String getTopPackage(){
long ts = System.currentTimeMillis();
UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");
List<UsageStats> usageStats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, ts-1000, ts);
if (usageStats == null || usageStats.size() == 0) {
return NONE_PKG;
}
Collections.sort(usageStats, mRecentComp);
return usageStats.get(0).getPackageName();
}
这是mRecentComp
:需要
static class RecentUseComparator implements Comparator<UsageStats> {
@Override
public int compare(UsageStats lhs, UsageStats rhs) {
return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? -1 : (lhs.getLastTimeUsed() == rhs.getLastTimeUsed()) ? 0 : 1;
}
}
此权限:
<uses-permission xmlns:tools="http://schemas.android.com/tools"
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
你会需要用户授权请求统计信息,使用它来引导用户进入设置页面:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
你可以检查您是否已经拥有的权限是这样的:
public static boolean needPermissionForBlocking(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
return (mode != AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return true;
}
}
谢谢。所有提到的东西都像魅力一样。但还有一件事,我可以使用任何种类的Content Observer来知道用户何时关闭或关闭它?我会在得到回应后很快接受答案。 – madhu 2014-12-15 05:27:56
我想你可以试试这个http://stackoverflow.com/questions/6896746/android-is-there-a-broadcast-action-for-volume-changes。 – 2014-12-15 17:25:04
如果这不起作用,你可以在我的答案中使用needPermission函数来检查它是否打开。 – 2014-12-15 17:26:25
通过ActivityManager.getRunningAppProcesses()
获取的RunningAppProcessInfo
列表。 选择RuningAppProcessInfo
,其importance
== RunningAppProcessInfo.IMPORTANCE_FOREGROUND
及其processState
== ActivityManager.START_TASK_TO_FRONT
。 (前者是容易的,后者则是困难的,因为反射是必要的)
- 1. Python是否有JGraph的替代方案?
- 2. Win API中DataGridView的替代方案
- 3. 是否有支持HTTPS的IIS的免费替代方案?
- 4. Google搜索API的替代方案
- 5. Google Directions API的替代方案
- 6. Eclipse API中的HttpClient替代方案
- 7. 在AngularJs中,$ watch是否有更高性能的替代方案?
- 8. 您是否知道任何有价值的XML_Serializer替代方案?
- 9. Android是否有免费的地图替代方案?
- 10. PHP是否有内置的exec(“nslookup”)替代方案?
- 11. 是否有使用Rails.env的替代方案?
- 12. Flash CS4是否有ASDoc的替代方案?
- 13. 在PHP中是否有shell_exec和proc_open的替代方案?
- 14. 是否有加入3个或更多表的替代方案?
- 15. 是否有使用RoleProvider的替代方案?
- 16. 在Mac OS X/Linux中是否有RawInput的替代方案
- 17. Z.EntityFramework.Extensions是否有非商业的替代方案?
- 18. Apache Solr中是否有MySQL的存储过程替代方案?
- 19. 是否有可靠的(单服务器)MongoDB替代方案?
- 20. 是否有使用@Version的可配置替代方案?
- 21. 是否有乐观锁定的替代方案
- 22. Grails中是否有ElementCollection/CollectionOfElements的替代方案
- 23. 是否有堆栈溢出模型的开源替代方案?
- 24. WSO2替代方案
- 25. W3C验证图像 - 非常大 - 是否有替代方案?
- 26. iOS故事板是否有XML替代方案?
- 27. PDFlib for php,是否有其他替代方案
- 28. SIP中继是否有其他替代方案?
- 29. Facebook API发布搜索替代方案
- 30. 是否有替代API网关?
这真的取决于你的目的的信息。如果它是合法的,那么可能有其他选择,但它们取决于你想要完成的是什么。 – 2014-11-03 13:20:09