दिलचस्प पोस्ट
स्विच केस 'या' PHP में कैसे उपयोग करें? Git-svn dcommit जीआईटी खतरनाक में विलय के बाद क्या है? 'जीआईटी लॉग' बनाने से कुछ रास्तों के लिए बदलावों को अनदेखा करना JSF पृष्ठ में HTML कोड के साथ स्ट्रिंग को इंजेक्ट करने और व्याख्या करने का घटक कच्चे पोस्ट डेटा प्राप्त करें पृष्ठ का एक ताज़ा करने के कारण सबमिट करने से बचने का सर्वोत्तम तरीका JQuery के बिना JQuery के एक JSONP अनुरोध कैसे करें? मैं परिवर्तनों के लिए एक फाइल कैसे देखूं? के लिए __gxx_personality_v0 क्या है? एंड्रॉइड स्टेटस बार को स्थायी रूप से छिपाना पायथन में इनपुट पढ़ने का सबसे तेज़ तरीका पायथन में मुद्रा स्वरूपण Android एप्लिकेशन पर लॉग इन करने के लिए Google- खाता का उपयोग करना एंड्रॉइड डेटाबेस मौजूद होने पर प्रश्न! जावास्क्रिप्ट माइम प्रकार

Android "एल" पर हाल के कार्यों को कैसे प्राप्त करें?

पृष्ठभूमि

मेरा ऐप हाल ही में लॉन्च किए गए समय तक एक ऐप सूची को सॉर्ट करने की अनुमति देता है

समस्या

एंड्रॉइड "एल" के रूप में, फ़ंक्शन मिल रिएन्ट टास्क केवल ऐप की सूची लौटाएगा, जो वर्तमान ऐप ने लॉन्च किया है, जैसा कि दस्तावेज़ीकरण में लिखा गया है:

यदि आपका ऐप ActivityManager.getRecentTasks () का उपयोग करता है …

नए समवर्ती दस्तावेजों और क्रियाकलाप कार्यों की शुरूआत के साथ आगामी रिलीज में (समवर्ती दस्तावेज और हालिया स्क्रीन में गतिविधियों को देखें) में सुविधा दी गई है, गतिविधि मैनेजर.गेटरेन्सटस्क () विधि को अब उपयोगकर्ता गोपनीयता में सुधार करने के लिए पदावनत किया गया है पिछड़े संगतता के लिए, यह विधि अभी भी अपने डेटा के एक छोटे से सबसेट को लौटाता है, जिसमें कॉलिंग एप्लिकेशन के स्वयं के कार्यों और संभवतः कुछ अन्य गैर-संवेदनशील कार्य (जैसे होम) शामिल हैं। यदि आपका ऐप अपने स्वयं के कार्यों को पुनर्प्राप्त करने के लिए इस पद्धति का उपयोग कर रहा है, तो उस जानकारी को पुनः प्राप्त करने के लिए android.app.ActivityManager.getAppTasks () का उपयोग करें।

एडीटी इस फ़ंक्शन के दस्तावेज को दिखाने के लिए (इंटरनेट पर वर्तमान में उपलब्ध नहीं है) का उपयोग करते समय एक ही लिखा जाता है:

यह विधि बहिष्कृत है एल के रूप में, यह विधि अब तीसरे पक्ष के अनुप्रयोगों के लिए उपलब्ध नहीं है: क्योंकि दस्तावेज केंद्रित अवतारों का परिचय इसका अर्थ है कि यह कॉलर को व्यक्तिगत जानकारी लीक कर सकता है। पिछली संगतता के लिए, यह अभी भी अपने डेटा का एक छोटा सा सबसेट लौटा देगा: कम से कम कॉल करने वाले के अपने कार्य (हालांकि उस जानकारी को पुनर्प्राप्त करने के लिए सही समर्थित तरीके के लिए getAppTasks देखें), और संभावित रूप से कुछ अन्य कार्य जैसे कि घर के लिए जाना जाता है संवेदनशील न हो

मुझे यह नहीं मिला कि यह कार्य क्यों लिया गया था, क्योंकि यह देखने में आसान है कि उपयोगकर्ता कौन-सी ऐप्स हैं और बिना किसी अनुमति के भी।

बात यह है कि यह इस सुविधा के लिए एक बड़ा प्रतिबंध है जिसे मैंने जोड़ा है, इसलिए मुझे आशा है कि इस पर काबू पाने का एक तरीका है।

मैंने क्या कोशिश की है

अभी के लिए, मैंने केवल अनुमान लगाया है कि किस एप्लिकेशन पर हाल ही में लॉन्च किया गया था – मुझे चलने वाली प्रक्रियाओं की सूची मिलती है

मैं प्रक्रियाओं के महत्व के मूल्य का भी इस्तेमाल कर सकता हूं और संभवतः "महत्त्व ReasonComponent", लेकिन यह सिर्फ सभी heuristics और अनुमान है …

प्रश्न

क्या इस प्रतिबंध को दूर करने का कोई तरीका है? किसी भी वैकल्पिक हल के बारे में मैंने सोचा नहीं है?

शायद यह रूट के साथ संभव है? या बिज़बॉक्स?

वेब के समाधान से एकत्रित समाधान "Android "एल" पर हाल के कार्यों को कैसे प्राप्त करें?"

वर्तमान में चलने वाले शीर्ष (अग्रभूमि) पैकेज नाम को एंड्रॉइड लॉलीपॉप में उपयोग आंकड़े API का उपयोग करने की आवश्यकता है।

लेकिन सूचना उपयोगकर्ता को प्रत्येक आवेदन के लिए सेटिंग्स में उपयोग डेटा तक पहुंच को मंजूरी देनी होगी। तो आपको उपयोगकर्ता को सीधे सेटिंग के साथ सेटिंग को लॉन्च करने के द्वारा संकेतित करना चाहिए

 Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); 

शीर्ष पैकेजेनाम पाने के लिए:

 String topPackageName ; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats"); long time = System.currentTimeMillis(); // We get usage stats for the last 10 seconds List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*10, time); // Sort the stats by the last time used if(stats != null) { SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>(); for (UsageStats usageStats : stats) { mySortedMap.put(usageStats.getLastTimeUsed(),usageStats); } if(!mySortedMap.isEmpty()) { topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } 

यदि आप वर्तमान फ़ोरग्राउंड पैकेज प्राप्त करने के लिए UsageStats का उपयोग करते हैं, तो उपयोगकर्ता आपको अधिसूचना ड्रॉवर खोलने या लॉक स्क्रीन पर गलत जानकारी प्राप्त करेंगे। (एंड्रॉइड लॉलीपॉप और मार्शमॉलो दोनों पर परीक्षण किया गया)

आपको UsageStatsManager.queryEvents () का उपयोग करना होगा और वर्तमान फ़ोरग्राउंड पैकेज को तय करने के लिए MOVE_TO_FOREGROUND इवेंट प्रकार के साथ नवीनतम ईवेंट देखें।

@ user3742392 उत्तर अच्छा है, हालांकि पिछले उपयोग के समय को खोजने के लिए ट्रीमार्क का उपयोग करना थोड़ा सा ओवरकिल है (विशेषकर यदि आप समय-समय पर शीर्ष चल रहे ऐप की जांच करना चाहते हैं)।

ट्रीमार्क के बिना सामान्य पाश के बजाय संपादित उत्तर यहां दिया गया है:

 String topPackageName; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService("usagestats"); long currentTime = System.currentTimeMillis(); // get usage stats for the last 10 seconds List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, currentTime - 1000 * 10, currentTime); // search for app with most recent last used time if (stats != null) { long lastUsedAppTime = 0; for (UsageStats usageStats : stats) { if (usageStats.getLastTimeUsed() > lastUsedAppTime) { topPackageName = usageStats.getPackageName(); lastUsedAppTime = usageStats.getLastTimeUsed(); } } } } 

लॉलीपॉप ने विधि को नापसंद किया; हालांकि एक नया एपीआई है जो आपको ऐप उपयोग देखने की अनुमति देता है। सुरक्षा समस्याओं के कारण विधि पदावनत की गई थी। : \

समय-अंतराल के बीच की गतिविधि को देखने के लिए UsageStatsManager के पास कुछ उपयोगी विधियां हैं आशा है कि यह आपकी आवश्यकताओं के लिए पर्याप्त है!

https://developer.android.com/reference/android/app/usage/package-summary.html