5
내가

getPackageManager() .getInstalledPackages (PackageManager.GET_ACTIVITIES는)

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

내가 PIS으로, 즉 그들이 선언 어떤 provivders (를 포함하여 설치된 패키지의 목록을 얻을 호출하면 [내가] .providers 가능성이

되는 null을 반환 null는 아니다). 내가

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

에서와 플래그들 PackageManager.GET_ACITIVITIES을 포함하는 경우

그러나, 나는 설치된 패키지의 "동일한"목록을 얻을 것으로 예상하지만, PIS [I] .activities가 null 인과 게다가. 그러나 나는, 나는 빈 목록을 얻을하지 않습니다.

documentation에 언급되지 않은 플래그 중 PackageManager.GET_ACTIVITES를 (를) 포함하는 것에 특별한 의미가 있습니까?

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처럼 보인다 : 주위

나의 현재 작업 플래그에서 PackageManager.GET_ACTIVITIES을두고하는 것입니다, 반환 된 목록을 다음 루프 다음과 같다.

빈 목록을 반환하는 getInstalledPackages (PackageManager.GET_ACTIVITIES)의 유일한 언급은 here이지만이 경우 문제는 주 응용 프로그램 스레드 외부에서 getInstalledPackages()를 호출하는 것과 관련이있는 것으로 보입니다. 내 경우의 상황.

p.s. 내가 두 번 PackageManager를 조회 할 필요가

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); 
      } 
     } 
    } 
} 

주의 사항 :이 내가 같은 문제를 가로 질러 와서 더 나은 해결 방법을 발견

답변

4

경우 중요한 것은, 진저 브레드의 0.602 VZW 빌드입니다. getPackageManager().getInstalledPackages(...)을 다시 사용하고 getPackageManager().getPackageInfo(...)

나는 도움이되기를 바랍니다.

+1

감사합니다. PC 덕분에 정말 도움이되었습니다. –