我在其中一個應用程序中使用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