Görünüşe göre Google nihayet mevcut ön plan uygulama paketini almak için tüm kapıları kapattı.
Öldüren Lollipop güncellemesinden sonra ve bu cevapgetRunningTasks(int maxNum)
sayesinde Lollipop'tan beri ön plan uygulama paketini almak için şu kodu kullandım:
final int PROCESS_STATE_TOP = 2;
RunningAppProcessInfo currentInfo = null;
Field field = null;
try {
field = RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception ignored) {
}
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appList = am.getRunningAppProcesses();
for (RunningAppProcessInfo app : appList) {
if (app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
app.importanceReasonCode == 0 ) {
Integer state = null;
try {
state = field.getInt( app );
} catch (Exception ignored) {
}
if (state != null && state == PROCESS_STATE_TOP) {
currentInfo = app;
break;
}
}
}
return currentInfo;
Görünüşe göre Android 5.1.1 ve üstü (6.0 Marshmallow) da öldürüldü getRunningAppProcesses()
. Şimdi kendi uygulama paketinizin bir listesini döndürür.
UsageStatsManager
Yeni UsageStatsManager
API'yi burada açıklandığı gibi kullanabiliriz ancak tüm uygulamalar için çalışmaz. Bazı sistem uygulamaları aynı paketi döndürecek
com.google.android.googlequicksearchbox
Erişilebilirlik Hizmeti (Aralık 2017: Google tarafından kullanılması yasaklanacak)
Bazı uygulamalar AccessibilityService
( burada görüldüğü gibi ) kullanır ancak bazı dezavantajları vardır.
Geçerli çalışan uygulama paketini almanın başka bir yolu var mı?
ps
Bir kabukta çalışmanın çıktısını ayrıştırırsam ve ilke eşittir "fg"
ve içeriği /proc/[pid]/oom_adj_score
eşitse 0
, uygulama ön plan uygulamasıdır. Maalesef /proc/[pid]/oom_adj_score
artık Android 6.0'da okunabilir görünmüyor . gist.github.com/jaredrummler/7d1498485e584c8a120e