2012-10-02 9 views
10

मैं एक ऐप पर काम कर रहा हूं जहां मैं उपयोगकर्ता को सभी इंस्टॉल किए गए ऐप्स के साथ प्रस्तुत करना चाहता हूं और उसे एक चुनने देता हूं और फिर इसके साथ कुछ करता हूं। मैंने एक ट्यूटोरियल का पालन किया (यह: http://impressive-artworx.de/2011/list-all-installed-apps-in-style/) हालांकि मुझे कुछ समस्याएं हैं। ट्यूटोरियल का पालन करने के बाद मुझे केवल ऐसे ऐप्स मिल गए जिन्हें पूर्वस्थापित नहीं किया गया था (जैसे सभी पृष्ठभूमि ऐप्स जो लॉन्च करने योग्य नहीं हैं) जो बहुत अच्छा है यदि आप उन ऐप्स को चाहते हैं जिन्हें उपयोगकर्ता ने Play store से डाउनलोड किया है। समस्या यह है कि मेरे ऐप में मैं यूट्यूब और ब्राउजर जैसे लॉन्च करने योग्य सिस्टम ऐप प्रदर्शित करना चाहता हूं लेकिन गैर-लॉन्च करने योग्य नहीं जैसे खोज अनुप्रयोग प्रदाता।सभी इंस्टॉल किए गए ऐप्स प्राप्त करते समय गैर-लॉन्च करने योग्य ऐप्स फ़िल्टर करें

यहाँ कोड है कि मैं जब क्षुधा पाने के लिए उपयोग कर रहा हूँ है:

private List<App> loadInstalledApps(boolean includeSysApps) { 
    List<App> apps = new ArrayList<App>(); 

    // the package manager contains the information about all installed apps 
    PackageManager packageManager = getPackageManager(); 

    List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA 

    for(int i=0; i < packs.size(); i++) { 
    PackageInfo p = packs.get(i); 
    ApplicationInfo a = p.applicationInfo; 

    App app = new App(); 
    app.setTitle(p.applicationInfo.loadLabel(packageManager).toString()); 
    app.setPackageName(p.packageName); 
    app.setVersionName(p.versionName); 
    app.setVersionCode(p.versionCode); 
    CharSequence description = p.applicationInfo.loadDescription(packageManager); 
    app.setDescription(description != null ? description.toString() : ""); 
    apps.add(app); 
    } 
    return apps; 
    } 

अब मेरे सवाल है, गैर-लॉन्च करने योग्य ऐप्स को फ़िल्टर करने का सबसे अच्छा तरीका क्या है?

किसी भी मदद की सराहना की जाती है!

उत्तर

25

सबसे अच्छा तरीका है:

public static List<ApplicationInfo> getAllInstalledApplications(Context context) { 
    List<ApplicationInfo> installedApps = context.getPackageManager().getInstalledApplications(PackageManager.PERMISSION_GRANTED); 
    List<ApplicationInfo> launchableInstalledApps = new ArrayList<ApplicationInfo>(); 
    for(int i =0; i<installedApps.size(); i++){ 
     if(context.getPackageManager().getLaunchIntentForPackage(installedApps.get(i).packageName) != null){ 
      //If you're here, then this is a launch-able app 
      launchableInstalledApps.add(installedApps.get(i)); 
     } 
    } 
    return launchableInstalledApps; 
} 
+0

यह एक अच्छा विचार नहीं है, क्योंकि कुछ क्षुधा getLaunchIntentForPackageName के लिए अशक्त लौट आते हैं। इस समाधान के साथ मुझे समस्या थी कि "टेलीफोनी" ऐप ऐप्स की सूची में नहीं था। एक बेहतर समाधान के लिए यहां देखें: https://stackoverflow.com/a/30446616/4274651 – Janosch

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