C'è un'alternativa per API getRunningTask

Stavo usando API getRunningTask in una delle mie applicazioni per trovare l'applicazione di Foreground. Questa API è stata deprecata da Lollipop. Dopo questa depreazione, ho preferito API getRunningAppProcess insieme a Importnce_Foreground. Ho anche escluso REASON_SERVICE e REASON_PROVIDER da questa list. Ho filtrato le applicazioni del sistema in base a una logica che ha funzionato perfettamente. Il problema è che, se l'applicazione A è in primo piano, ottengo l'applicazione B come un picco. Quindi, questo approccio è attualmente discutibile. C'è un'altra alternativa alla API getRunningTask? Oppure mi manca una cosa semplice nell'attuale approccio. Aiuta i ragazzi.

  • Ogni attività in Android è un process, o un'applicazione è un process
  • Come hide in modo programmato l'ID chiamante in Android
  • Aggiungere il comportmento di visualizzazione dello scorrimento della barra delle applicazioni a più visualizzazioni in CoordinatorLayout
  • android lollipop colore di effetto edgeview edgeview
  • Proprietà checkedButton di RadioGroup
  • come get il text da textview
  • 2 Solutions collect form web for “C'è un'alternativa per API getRunningTask”

    Sulla base della risposta a questa domanda

    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(); } 

    Questo è il 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; } } 

    Questa authorization è necessaria:

     <uses-permission xmlns:tools="http://schemas.android.com/tools" android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" /> 

    E hai bisogno dell'authorization dell'utente per richiedere le statistiche, usa questo per dirigere l'utente alla pagina delle impostazioni:

     Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); startActivity(intent); 

    E puoi controllare se hai già un permesso come questo:

     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; } } 

    Ottieni l'elenco di RunningAppProcessInfo da ActivityManager.getRunningAppProcesses() . Scegli il RuningAppProcessInfo con la cui importnce == RunningAppProcessInfo.IMPORTANCE_FOREGROUND e il cui processState == ActivityManager.START_TASK_TO_FRONT . (Il primo è facile, il secondo è difficile perché la riflessione è necessaria)

    Vedi la mia risposta per questa domanda getRunningTasks non funziona in Android L

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.