ऐसा लगता है कि Google ने वर्तमान अग्रभूमि अनुप्रयोग पैकेज प्राप्त करने के लिए सभी दरवाजे बंद कर दिए हैं।
लॉलीपॉप अपडेट के बाद, जो मारा गया getRunningTasks(int maxNum)
और इस जवाब के लिए धन्यवाद , मैंने इस कोड का इस्तेमाल लॉलीपॉप के बाद से अग्रभूमि अनुप्रयोग पैकेज पाने के लिए किया:
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;
एंड्रॉइड 5.1.1 और ऊपर (6.0 मार्शमैलो), ऐसा लगता है, getRunningAppProcesses()
साथ ही मार दिया गया। अब यह आपके स्वयं के एप्लिकेशन पैकेज की सूची लौटाता है।
UsageStatsManager
हम यहां वर्णित केUsageStatsManager
रूप में नए एपीआई का उपयोग कर सकते हैं, लेकिन यह सभी अनुप्रयोगों के लिए काम नहीं करता है। कुछ सिस्टम एप्लिकेशन उसी पैकेज को वापस करेंगे
com.google.android.googlequicksearchbox
AccessibilityService (दिसंबर 2017: Google द्वारा उपयोग के लिए प्रतिबंधित किया जा रहा है)
कुछ एप्लिकेशन उपयोग करते हैं AccessibilityService
(जैसा कि यहां देखा गया है ) लेकिन इसके कुछ नुकसान हैं।
क्या वर्तमान चल रहे एप्लिकेशन पैकेज प्राप्त करने का एक और तरीका है?
ps
किसी शेल में रन करने के आउटपुट को पार्स करता हूं और पॉलिसी समान है "fg"
और /proc/[pid]/oom_adj_score
बराबर है 0
तो ऐप अग्रभूमि एप्लिकेशन है। दुर्भाग्य से, ऐसा लगता है /proc/[pid]/oom_adj_score
कि अब Android 6.0 पर पढ़ने योग्य नहीं है। gist.github.com/jaredrummler/7d1498485e584c8a120e