studio startforeground requestfocus ejemplo definicion android foreground

startforeground - view android definicion



Problema de Android 6.0 Marshmallow UsageStatsManager al intentar recuperar la aplicaciĆ³n de primer plano (3)

Eche un vistazo a github.com/ricvalerio/foregroundappchecker , podría ser lo que necesita. Proporciona código de ejemplo y elimina el dolor de tener que implementar el detector de primer plano de versiones cruzadas.

cada vez que trato de consultar las Estadísticas de uso del UsageStatsManager puedo obtener correctamente la última aplicación en ejecución. Sin embargo, si abro la barra de estado y hay una nueva notificación, la última aplicación utilizada (basada en UsageStats) cambiará a la de la notificación. Como resultado, recibo falsas alarmas de que la aplicación en primer plano ha cambiado.

Parece que no puedo encontrar una manera de filtrar esos sorteos específicos. ¿Algunas ideas?

En este momento, solicito la aplicación de primer plano con el siguiente código. El problema solo existe en Marshmallow (5.X funciona correctamente).

UsageStatsManager mUsageStatsManager = (UsageStatsManager) rotationManager.getSystemService("usagestats"); long time = System.currentTimeMillis(); // We get usage stats for the last 10 seconds List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 2, time); // Sort the stats by the last time used if (stats != null) { SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : stats) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { foregroundApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } }


En el sistema operativo Android 6.0, la función getUsageStats da un tamaño de lista cero. Para confirmarlo, puedes revisar cualquier aplicación de bloqueo de Play Store. Esas aplicaciones no están funcionando en Android 6.0.


Puede consultar el useEvent para verificar si el último evento de la aplicación activa es UsageEvents.Event.MOVE_TO_FOREGROUND.

Después de obtener la aplicación de primer plano, puede consultar el siguiente código:

UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 100 * 1000, time); UsageEvents.Event event = new UsageEvents.Event(); // get last event while (usageEvent.hasNextEvent()) { usageEvent.getNextEvent(event); } if (foregroundApp.equals(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { return foregroundApp ; }