ดูเหมือนว่าในที่สุด Google จะปิดประตูทั้งหมดเพื่อรับแพ็คเกจแอปพลิเคชันเบื้องหน้าปัจจุบัน
หลังจากการอัปเดต Lollipop ซึ่งฆ่าgetRunningTasks(int maxNum)
และด้วยคำตอบนี้ฉันใช้รหัสนี้เพื่อรับแพ็คเกจแอปพลิเคชันเบื้องหน้าตั้งแต่ 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()
เช่นกัน ตอนนี้จะส่งคืนรายการแพ็คเกจแอปพลิเคชันของคุณเอง
การใช้ StatsManager
เราสามารถใช้UsageStatsManager
API ใหม่ได้ตามที่อธิบายไว้ที่นี่แต่ใช้ไม่ได้กับทุกแอปพลิเคชัน แอปพลิเคชันระบบบางตัวจะส่งคืนแพ็กเกจเดียวกัน
com.google.android.googlequicksearchbox
AccessibilityService (ธันวาคม 2017: Google จะถูกห้ามใช้)
บางแอพพลิเคชั่นใช้งานAccessibilityService
(ดังที่เห็นที่นี่ ) แต่ก็มีข้อเสียอยู่บ้าง
มีวิธีอื่นในการรับแพ็กเกจแอปพลิเคชันที่กำลังทำงานอยู่ในปัจจุบันหรือไม่?