¿Existe una alternativa para getRunningTask API?

Estaba usando getRunningTask API en uno de mi aplicación para encontrar la aplicación de primer plano. Esta API se ha desaprobado desde Lollipop. Después de esta depreciación, preferí getRunningAppProcess API junto con Importance_Foreground. También descargué REASON_SERVICE y REASON_PROVIDER de esta lista. He filtrado las aplicaciones del sistema basado en una lógica, que funcionó perfectamente. El problema es que, si la aplicación A está en primer plano, obtengo la aplicación B como un punto. Por lo tanto, este enfoque es actualmente cuestionable. ¿Hay alguna otra alternativa a la API getRunningTask? ¿O estoy perdiendo cualquier cosa simple en el enfoque actual. Por favor, ayuden chicos.

Basado en la respuesta a esta pregunta

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

Este es el 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; } } 

Este permiso es necesario:

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

Y necesitará la autorización del usuario para solicitar las estadísticas, use esto para dirigir al usuario a la página de configuración:

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

Y puedes comprobar si ya tienes permiso como este:

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

Obtenga la lista de RunningAppProcessInfo por ActivityManager.getRunningAppProcesses() . Elija RuningAppProcessInfo con cuya importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND y cuyo processState == ActivityManager.START_TASK_TO_FRONT . (La primera es fácil, la última es difícil porque la reflexión es necesaria)

Ver mi respuesta para esta pregunta getRunningTasks no funciona en Android L

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.