मैं एक ऐप लिख रहा हूं जो उपयोगकर्ता को इंस्टॉल किए गए ऐप्स की सूची देखने की अनुमति देता है, उनमें से एक का चयन करें और फिर इसे शेड्यूल पर शुरू करें। स्टैक ओवरफ्लो से ट्यूटोरियल्स का उपयोग करके मैं यह पता लगाने में कामयाब रहा कि स्थापित गतिविधियों की सूची कैसे प्राप्त करें, उनके पैकेज नाम और आइकन (यानी here - इसे करने के कई तरीके)। शायद ज़रुरत पड़े, यह मैं कैसे गतिविधियों शुरू करते हैं, यह दोषरहित काम करता है, यहाँ कोई समस्या नहीं:एंड्रॉइड: लॉन्चर में दिखाई देने वाली स्थापित गतिविधियों की सूची कैसे प्राप्त करें, बिना डुप्लिकेट
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.setAction(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
समस्या इंस्टॉल किए गए एप्लिकेशन की एक सूची को पुन: प्राप्त के साथ है।
1) का उपयोग
PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA)
और apps
से प्रत्येक तत्व से आप इसे पैकेज नाम और पैकेज लेबल (एप्लिकेशन के नाम) है प्राप्त कर सकते हैं: मैं दो तरह से स्थापित अनुप्रयोगों की एक सूची प्राप्त करने के लिए मिल गया है।
2)
PackageManager pm = getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(mainIntent, 0);
for(ResolveInfo info : resolveInfos) {
ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
//...
//get package name, icon and label from applicationInfo object
}
का उपयोग पहले विधि के साथ कोई समस्या है: यह सब इंस्टॉल किए गए पैकेज, प्रणाली सेवाओं सहित, जो किसी भी गतिविधि शामिल नहीं हो सकता है और इसलिए चलाने योग्य प्रोग्राम नहीं हैं देता है। यहां एक उदाहरण के साथ एक स्क्रीनशॉट है:
ऊपर दिए गए सभी आइटमों में कोई आइकन लॉन्च करने योग्य नहीं है।
रूप में अच्छी तरह दूसरा दृष्टिकोण के साथ कोई समस्या है: सूची के कई आइटमों का डुप्लिकेट हैं:
जब मैं डिबगर मैं देख में एक ब्रेकपाइंट की स्थापना की, कि इन "मैप्स" आइटम अलग है गतिविधि नाम ("com.google.android.maps.MapsActivity", "com.google.android.maps.LatitudeActivity", "com.google.android.maps.PlacesActivity" आदि)।
मैंने दूसरे दृष्टिकोण का उपयोग करने का निर्णय लिया, क्योंकि यह एक सूची देता है जो मेरी ज़रूरतों के लिए अधिक उपयुक्त है, लेकिन मुझे डुप्लीकेट को फ़िल्टर करने और केवल ऐप के लिए डिफ़ॉल्ट गतिविधि दिखाने का कोई तरीका नहीं मिल रहा है, क्योंकि वे लॉन्चर में दिखाई दें (आप केवल अपने फोन की ऐप्स में एक 'मानचित्र' देखते हैं, चार नहीं)। मैंने ApplicationInfo.FLAG_SYSTEM
के माध्यम से सिस्टम ऐप्स को फ़िल्टर करने का प्रयास किया है, लेकिन यह मैप्स और अन्य प्रीइंस्टॉल किए गए ऐप्स सहित कई ऐप्स को हटा देता है। क्वेरी INTentActivities निष्पादित करते समय मैंने PackageManager.MATCH_DEFAULT_ONLY
ध्वज का उपयोग करने का प्रयास किया है, लेकिन यह कुछ ऐप्स छोड़कर कई ऐप्स को भी फ़िल्टर करता है।
मैं थोड़ी देर से खो गया हूं, और मुझे नहीं पता कि क्या करना है। मैंने इंस्टॉल किए गए ऐप्स की एक सूची पुनर्प्राप्त करने के बारे में stackoverflow पर सभी प्रश्न पढ़े हैं, लेकिन यह समस्या कभी नहीं लाई गई है। कृपया, किसी की मदद करें? मैं इंस्टॉल किए गए लॉन्च करने योग्य ऐप्स की एक सूची कैसे प्राप्त करूं जिसमें कोई डुप्लीकेट नहीं है?
आप कहते हैं कि "इस मुद्दे को लाया गया कभी नहीं किया है।" कृपया इसे जांचें, शायद यह मदद करता है: http://stackoverflow.com/questions/4598769/list-of-user-installed-apps/4599124#4599124 – Zelimir
मेरा मतलब सूची में डुप्लिकेट था, मैंने किसी को इसका उल्लेख नहीं देखा है। हां, मैंने यह टिप्पणी देखी है, मैंने 'ApplicationInfo.FLAG_SYSTEM' के साथ ऐप्स छोड़ने का प्रयास किया है, लेकिन किसी कारण से यह गेम और इस तरह के कई मान्य ऐप्स को हटा देता है। –