In Android 6.0 Marshmallow suche ich nach der Vordergrund-App mit dem folgenden Code, aber es gab ein Problem mit eingehenden Benachrichtigungen, da es die App im Vordergrund zur Benachrichtigung zeigt. Das Problem besteht nur in Marshmallow (5.X funktioniert ordnungsgemäß).Vordergrundpaket-Paketname in Marshmallow um 3 Sekunden verzögert
// API 21 and above
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static String getProcessNew(UsageStatsManager mUsageStatsManager, Context c) throws Exception {
String st = null;
try {
long endTime = System.currentTimeMillis();
long beginTime = endTime - 1000 * 10;
// We get usage stats for the last minute
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, beginTime,
endTime);
// 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()) {
st = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
} catch (Exception e) {
Log.d("main", "Wxxxxexx " + e);
}
return st;
}
und dann Benachrichtigung Problem wird mit Hilfe der Lösung von dieser Antwort UsageEvents gelöst.
Als Lösung in Antwort legte ich den Code und seine Arbeit, um Vordergrund App zu bekommen, aber es um 3 Sekunden verzögert. Mein Dienst überprüft die Vordergrund-App und wiederholt alle 500 ms, aber WhatsApp-Paket erkennt nach 3 Sekunden, WhatsApp zu starten. Dies ist Code von UsageEvents, den ich von oben verwende.
if (BuildV >= 23) {
long endTime = System.currentTimeMillis();
long beginTime = endTime - 1000 * 10;
UsageEvents usageEvents = mUsageStatsManager.queryEvents(beginTime, endTime);
UsageEvents.Event event = new UsageEvents.Event();
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(event);
}
if (st.equals(event.getPackageName())
&& event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
pack = st;
}
}