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);
}
}
}
}
주의 사항 :이 내가 같은 문제를 가로 질러 와서 더 나은 해결 방법을 발견
감사합니다. PC 덕분에 정말 도움이되었습니다. –