के संबंध में "2. मेरा बैकग्राउंड एप्लिकेशन कैसे जान सकता है कि वर्तमान में अग्रभूमि में चल रहा एप्लिकेशन क्या है।"
इस getRunningAppProcesses()
पद्धति का उपयोग न करें क्योंकि यह मेरे अनुभव से सभी प्रकार के सिस्टम को बकवास करता है और आपको कई परिणाम मिलेंगे RunningAppProcessInfo.IMPORTANCE_FOREGROUND
। getRunningTasks()
इसके बजाय उपयोग करें
यह वर्तमान अग्रभूमि अनुप्रयोग की पहचान करने के लिए मेरी सेवा में उपयोग किया जाने वाला कोड है, यह वास्तव में आसान है:
ActivityManager am = (ActivityManager) AppService.this.getSystemService(ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
Thats यह है, तो आप आसानी से अग्रभूमि एप्लिकेशन / गतिविधि के विवरण का उपयोग कर सकते हैं:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
यह गतिविधि में एक अतिरिक्त अनुमति की आवश्यकता है और पूरी तरह से काम करता है।
<uses-permission android:name="android.permission.GET_TASKS" />