Google은 마침내 현재 포 그라운드 애플리케이션 패키지를 얻기 위해 모든 문을 닫은 것 같습니다.
이 답변getRunningTasks(int maxNum)
덕분에 Lollipop 업데이트 후 Lollipop 이후 포 그라운드 애플리케이션 패키지를 가져 오는 데이 코드를 사용했습니다.
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;
Android 5.1.1 이상 (6.0 Marshmallow)도 종료 된 것 같습니다 getRunningAppProcesses()
. 이제 자체 애플리케이션 패키지 목록을 반환합니다.
UsageStatsManager
여기에 설명 된대로 새 UsageStatsManager
API를 사용할 수 있지만 모든 애플리케이션에서 작동하는 것은 아닙니다. 일부 시스템 응용 프로그램은 동일한 패키지를 반환합니다.
com.google.android.googlequicksearchbox
AccessibilityService (2017 년 12 월 : Google에서 사용 금지 예정)
일부 응용 프로그램은 AccessibilityService
( 여기 에서 볼 수 있듯이 ) 사용하지만 몇 가지 단점이 있습니다.
현재 실행중인 애플리케이션 패키지를 가져 오는 다른 방법이 있습니까?
ps
쉘에서 실행되는 출력을 구문 분석하고 정책이 같고 "fg"
내용이 /proc/[pid]/oom_adj_score
같으면 0
앱이 포 그라운드 애플리케이션입니다. 안타깝게도 /proc/[pid]/oom_adj_score
Android 6.0에서는 더 이상 읽을 수없는 것 같습니다 . gist.github.com/jaredrummler/7d1498485e584c8a120e