5

अगर मैं फोनgetPackageManager() .getInstalledPackages (PackageManager.GET_ACTIVITIES) अशक्त

PackageManager pm = getPackageManager() ; 
    List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_PROVIDERS) ; 

मैं Pis के साथ, किसी भी provivders वे घोषित (यानी सहित इंस्टॉल किए गए पैकेज की एक सूची, मिल [i] .providers संभवतः जा रहा है देता है गैर-शून्य)।

हालांकि, अगर मैं झंडे के बीच में PackageManager.GET_ACITIVITIES,

PackageManager pm = getPackageManager() ; 
    List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_ACTIVITIES | PackageManager.GET_PROVIDERS) ; 

में के रूप में शामिल हैं मैं इंस्टॉल किए गए पैकेज की "एक ही" सूची प्राप्त करने की उम्मीद है, लेकिन Pis [i] .activities में गैर-शून्य होने के साथ भी। लेकिन मैं नहीं, मैं एक खाली सूची मिलता है।

क्या documentation में उल्लेख नहीं किए गए झंडे के बीच PackageManager.GET_ACTIVITES शामिल करने के बारे में कुछ खास है?

मेरे वर्तमान के आसपास काम झंडे से बाहर PackageManager.GET_ACTIVITIES छोड़ने के लिए है, तो लौटे सूची के माध्यम से पाश इस प्रकार है:

for (PackageInfo pi : pis) { 
     try { 
      PackageInfo tmp = pm.getPackageInfo (pi.packageName, PackageManager.GET_ACTIVITIES) ; 
      pi.activities = tmp.activities ; 
      } 
     catch (NameNotFoundException e) { 
      Log.e (TAG, e.getMessage()) ; 
      } 

लेकिन यह एक वास्तविक kludge की तरह लगता है।

केवल उल्लेख मैं getInstalledPackages (PackageManager.GET_ACTIVITIES) एक खाली सूची लौटने का मिल सकता है here है, लेकिन इस मामले में समस्या मुख्य आवेदन धागा बाहर getInstalledPackages बुला() के बारे में कुछ गया लगता है और कहा कि नहीं है मेरे मामले में स्थिति।

पेज।

public void listAllActivities() throws NameNotFoundException 
{ 
    List<PackageInfo> packages = getPackageManager().getInstalledPackages(0); 
    for(PackageInfo pack : packages) 
    { 
     ActivityInfo[] activityInfo = getPackageManager().getPackageInfo(pack.packageName, PackageManager.GET_ACTIVITIES).activities; 
     Log.i("Pranay", pack.packageName + " has total " + ((activityInfo==null)?0:activityInfo.length) + " activities"); 
     if(activityInfo!=null) 
     { 
      for(int i=0; i<activityInfo.length; i++) 
      { 
       Log.i("PC", pack.packageName + " ::: " + activityInfo[i].name); 
      } 
     } 
    } 
} 

सूचना है कि मैं PackageManager दो बार क्वेरी करने के लिए की जरूरत है: इस जिंजरब्रेड की 0.602 VZW निर्माण मामले में मायने रखती है कि

उत्तर

4

मैं एक ही मुद्दे में आए और एक बेहतर समाधान का पता चला है। getPackageManager().getInstalledPackages(...) का उपयोग कर और फिर getPackageManager().getPackageInfo(...)

का उपयोग कर मुझे आशा है कि यह मदद करता है एक बार।

+1

धन्यवाद पीसी, यह वास्तव में मुझे मदद मिली –

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