Android 6.0 Marshmallow'da, önalan uygulaması için aşağıdaki kodu kullanarak sorgu yaparım, ancak ön plan uygulamasının bildirimi gönderen uygulamaya göstermesi nedeniyle gelen bildirimlerle ilgili bir sorun oluştu. Sorun sadece Marshmallow'da var (5.X düzgün çalışıyor).Marshmallow'da ön planın appName uygulamasının 3 saniye gecikmeli olarak alınıyor
// 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;
}
ve sonra bildirim sorunu bu cevap UsageEvents gelen çözüm kullanarak çözülür.
Yanıt olarak çözüm olarak Foreground uygulamasını almak için kodu ve çalışmasını koydum ama 3 saniye gecikti. Hizmetim ön plan uygulamasını kontrol ediyor ve her 500 ms'de bir tekrar ediyor ancak whatsapp paketi whatsapp'i başlattıktan sonra 3 saniye sonra algılıyor. Bu, yukarıdaki çözümden kullandığım UsageEvents kodudur.
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;
}
}