2013-01-10 28 views
13

मैं अपने एप्लिकेशन से "हालिया ऐप्स" संवाद खोलने में सक्षम होना चाहता हूं। यह वह संवाद है जो होम बटन को लंबे समय से दबाकर खोला जाता है। मैं एंड्रॉइड 4.1 या इससे पहले के लिए प्रोग्रामिंग कर रहा हूं। मुझे कस्टम एक्सेसिबिलिटी सेवा को कार्यान्वित करके और AccessibilityService.performGlobalAction (GLOBAL_ACTION_RECENTS) को कॉल करके ऐसा करने का एक तरीका मिला, लेकिन इसके लिए फोन पर पहुंच को सक्षम करने की आवश्यकता है, जो बहुत वांछनीय नहीं है। क्या ऐप से इस संवाद को खोलने का कोई और तरीका है?एंड्रॉइड: प्रोग्रामेटिक रूप से "हालिया ऐप्स" संवाद

सहायता के लिए धन्यवाद!

उत्तर

5

आप उस तक नहीं पहुंच सकते हैं। हालांकि, अपने आप को रोल करना मुश्किल नहीं है। getRecentTasks() विधि हाल ही में चलाने वाले ऐप्स की एक सूची लौटाती है। बस सूची लें और इसमें अपना यूआई जोड़ें।

इसका एक फायदा यह है कि कम से कम एंड्रॉइड के पुराने संस्करणों पर डिफ़ॉल्ट, केवल आपको 8 ऐप्स दिखाता है। यदि आप अपना खुद का रोल करते हैं तो आप जितना चाहें दिखा सकते हैं।

+3

याद रखें कि कुछ विक्रेता हालिया ऐप्स संवाद को संशोधित करते हैं, इसलिए आपका संवाद उन उपयोगकर्ताओं के लिए समान नहीं होगा। – Leonidos

+0

@ लियोनिडोस ट्रू, लेकिन यह सबसे अच्छा समाधान है जिसे मैं 'एक्सेसिबिलिटी सर्विस' का उपयोग किए बिना आ सकता हूं। –

+0

मुझे पता है कि दुर्भाग्य से कोई अन्य तरीका नहीं है ... – Leonidos

34

कहने के लिए खेद है, लेकिन हाल ही की ऐप्स गतिविधि को ट्रिगर करना संभव है।

स्टेटसबारमैनेजर सेवा एक सार्वजनिक विधि लागू करती है जिसे आप प्रतिबिंब के माध्यम से उपयोग कर सकते हैं।

Class serviceManagerClass = Class.forName("android.os.ServiceManager"); 
Method getService = serviceManagerClass.getMethod("getService", String.class); 
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar"); 
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor()); 
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder }); 
Method clearAll = statusBarClass.getMethod("toggleRecentApps"); 
clearAll.setAccessible(true); 
clearAll.invoke(statusBarObject); 

है मज़ा :)

+0

देखें प्रतिबिंब का उपयोग करना आम तौर पर एक बुरा विचार है क्योंकि इसकी कोई गारंटी नहीं है कि यह काम करता है, या एंड्रॉइड के सभी संस्करणों पर काम करना जारी रखेगा। –

+4

यदि उपरोक्त कोड का उपयोग करते हैं, तो इसे 'try/catch' –

+0

में लपेटना सुनिश्चित करें उपरोक्त कोड Android2.2 और 2.3 के लिए काम नहीं कर रहा है, क्या यह काम करने के लिए कोई अन्य वैकल्पिक तरीका है। – Sathish

4

यह TOGGLE_RECENTS आशय का उपयोग किया जा सकता है:

आप नीचे दिए गए कोड का उपयोग कर सकते हैं।

Intent intent = new Intent ("com.android.systemui.recent.action.TOGGLE_RECENTS"); 
intent.setComponent (new ComponentName ("com.android.systemui", "com.android.systemui.recent.RecentsActivity")); 
startActivity (intent); 
+0

धन्यवाद; यह मेरे लिए एंड्रॉइड 5.1.1 पर काम किया। हालांकि, परिणामी गतिविधि सामान्य एंड्रॉइड 5 एक के लिए अलग दिखती थी। साथ ही, मुझे लगता है कि आप अपनी दूसरी पंक्ति पर एक समापन कोष्ठक चूक गए हैं। – Sam

संबंधित मुद्दे