Użyłem funkcji API getRunningTask w jednej z moich aplikacji do znalezienia aplikacji na pierwszym planie. Ten interfejs API jest przestarzały od czasu Lollipop. Po tym wycofaniu wolałem API getRunningAppProcess wraz z Importance_Foreground. Wykluczyłem także REASON_SERVICE i REASON_PROVIDER z tej listy. Odfiltrowałem aplikacje systemowe oparte na logice, która działała doskonale. Problem polega na tym, że jeśli aplikacja A znajduje się na pierwszym planie, otrzymuję aplikację B jako skok. Takie podejście jest obecnie wątpliwe. Czy jest jakaś inna alternatywa dla API getRunningTask? Czy też brakuje mi jakiejś prostej rzeczy w obecnym podejściu. Pomóżcie chłopaki.Czy istnieje alternatywa dla getRunningTask API
Odpowiedz
Na podstawie odpowiedzi na 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();
}
To 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;
}
}
Uprawnienie to jest potrzebne:
<uses-permission xmlns:tools="http://schemas.android.com/tools"
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
i trzeba będzie autoryzację użytkownika, aby zażądać statystyki, użyj tego, aby skierować użytkownika do strony ustawień:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
I można sprawdzić, czy masz już uprawnienia takiego:
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;
}
}
Dzięki. Wszystkie wspomniane rzeczy działają jak urok. Ale jeszcze jedno, czy mogę użyć dowolnego obserwatora treści, aby wiedzieć, kiedy użytkownik je wyłącza lub włącza? Przyjmuję odpowiedź wkrótce po otrzymaniu odpowiedzi na to. – madhu
Sądzę, że możesz spróbować tego http://stackoverflow.com/questions/6896746/android-is-there-a-broadcast-action-for-volume-changes. –
Jeśli to nie zadziała, możesz użyć funkcji needPermission w mojej odpowiedzi, aby sprawdzić, czy jest włączona. –
uzyskać listę RunningAppProcessInfo
przez ActivityManager.getRunningAppProcesses()
. Wybierz RuningAppProcessInfo
, z którego importance
== RunningAppProcessInfo.IMPORTANCE_FOREGROUND
i którego processState
== ActivityManager.START_TASK_TO_FRONT
. (Były to proste, to ostatnie jest trudne, ponieważ odbicie jest to konieczne)
Zobacz moją odpowiedź na to pytanie getRunningTasks doesn't work in Android L
- 1. Czy istnieje alternatywa dla HTML?
- 2. czy istnieje alternatywa dla '#' + div_id?
- 3. Czy istnieje alternatywa dla śmierci?
- 4. Czy istnieje alternatywa dla klienta lokalizacji (Google Play API)?
- 5. Czy istnieje alternatywa dla QR Generatora Google Chart API?
- 6. Czy istnieje alternatywa dla opensource dla StreamBase?
- 7. Czy istnieje szybsza alternatywa dla GDI GetPixel()?
- 8. Czy istnieje ogólna alternatywa dla klasy ListDictionary?
- 9. Czy istnieje bezpłatna alternatywa dla Łowcy wyjątków?
- 10. Czy istnieje doskonała alternatywa dla `except: Pass`?
- 11. Czy istnieje osadzalna alternatywa Java dla Redis?
- 12. Czy istnieje alternatywa SCP dla PowerShell?
- 13. Czy istnieje bezpieczna alternatywa dla std :: equal?
- 14. PDFlib dla php, czy istnieje alternatywa?
- 15. Czy istnieje alternatywa dla TOP w MySQL?
- 16. Czy istnieje całkowita alternatywa dla funkcji `czytaj`?
- 17. Czy istnieje dobra alternatywa dla FishEye Atlassiana?
- 18. Czy istnieje alternatywa dla Runtime.getRuntime(). Exec()
- 19. Czy istnieje niekomercyjna alternatywa dla Z.EntityFramework.Extensions?
- 20. Czy istnieje alternatywa gałązka dla DateTime :: createFromFormat (...)?
- 21. Czy istnieje alternatywa dla Deep Zoom dla aplikacji Windows Store?
- 22. Czy istnieje alternatywa dla przestrzeni nazw dla PHP class_exists()?
- 23. Czy istnieje alternatywa dla funkcji date_parse dla php 5.1. *?
- 24. Czy istnieje alternatywa dla getClass(). GetResource() dla Static ImageIcon
- 25. Bardziej użyteczna alternatywa dla API Criteria
- 26. Jquery obiecuje: Czy istnieje alternatywa wielokrotnego użytku?
- 27. Czy istnieje alternatywa Hash :: Util dla skrótów mieszanych?
- 28. Czy istnieje alternatywa typu open source dla modelu Stack Overflow?
- 29. Czy istnieje alternatywa dla NestedScrollView do użytku z WebView?
- 30. Czy istnieje alternatywa dla AppDomain.GetAssemblies w bibliotece przenośnej?
To naprawdę zależy od celu dla informacji. Jeśli jest to uzasadnione, prawdopodobnie istnieją alternatywy, ale zależą one od tego, co dokładnie próbujesz osiągnąć. –