1

다음과 같이 앱 목록을 가져 오는 중이며 시스템 앱을 비롯하여 모든 앱이 설치되어있는 앱만 가져옵니다.모든 앱 (시스템 앱 포함)의 목록을 가져 오는 방법은 무엇입니까?

packageList1 = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA); 

이 :

나는 다음과 같은 시도 두 경우 모두 들어

packageList1 = getPackageManager().getInstalledPackages(0); 

, 나는 전화에 설치 한 응용 프로그램의 동일한 목록을 얻고있다.

+0

당신은 목록 시스템 응용 프로그램을 포함하지 않는 것을 확실합니까? 그것이해야하기 때문에, 당신은 틀리게 당신이 자료를 해석하고있다. 모든'ApplicationInfos'를 돌면서'FLAG_UPDATED_SYSTEM_APP' 또는'FLAG_SYSTEM' 플래그가있는 것들은 시스템 앱입니다. –

+0

네가 맞아, 나는 내 코드의 일부를 오해하고 있었다. (나는 목록을 얻은 후에 약간의 포스트 프로세싱을한다) – user1406716

+0

[가능한 모든 앱을 안드로이드 폰에 설치하는 방법]을 복제 할 수있다. (http://stackoverflow.com/questions/5393607)/how-to-get-all-apps-on-android-phone) – user1406716

답변

4

이미이 호출하여 시스템 애플 리케이션을 포함하여 설치된 모든 응용 프로그램의 목록을 얻고있다 :

List<ApplicationInfo> apps = getPackageManager().getInstalledPackages(0); 

플래그를 가진 사람들을 :

  • ApplicationInfo.FLAG_UPDATED_SYSTEM_APP
  • ApplicationInfo.FLAG_SYSTEM

은 시스템 앱입니다. 당신은이 같은 플래그를 확인할 수 있습니다

List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
for(ApplicationInfo app : apps) { 
    if((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { 
     // It is a system app 
    } else { 
     // It is installed by the user 
    } 
} 
0
List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
for(ApplicationInfo app : apps) { 
    if((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { 
     // It is a system app 
    } else { 
     // It is installed by the user 
    } 
}