ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 핸드폰에 설치된 앱 불러오기
    Android 2025. 2. 25. 19:28

     

    안녕하세요~ 오늘은 프로젝트를 진행하면서 알게된 핸드폰에 설치된 앱을 불러오는 방법에 대해 적어보려고 합니다.🙂

     

    코드를 작성하는 적절한 위치

    만약 프로젝트가 단일 액티비티 구조라면, 설치 앱 목록을 불러오는 코드는 프래그먼트보다는 액티비티의 onCreate 생명주기에 작성하는 게 좋습니다. 왜냐하면, 프래그먼트는 생명주기가 생성 및 소멸될 수 있지만, 액티비티의 생명주기상 onCreate는 앱을 실행한 후 한 번만 호출되기 때문입니다.

     

    변수 설정

    private lateinit var totalApps: MutableList<ApplicationInfo>
    private lateinit var requiredApps: List<ApplicationInfo>

     

    totalApps 변수는 핸드폰에 설치된 모든 앱 목록을 저장할 변수이고, requiredApps는 시스템 앱을 제외한 사용자가 직접 설치한 앱 목록을 저장할 변수입니다.

     

     

    시스템 앱 제외한 설치 앱 가져오기

    totalApps = packageManager.getInstalledApplications(0)
    requiredApps = totalApps.filter { app ->
        val isSystemApp = (app.flags and ApplicationInfo.FLAG_SYSTEM) != 0
        val isUpdatedSystemApp = (app.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0
        !isSystemApp && !isUpdatedSystemApp
    }

     

    packageManager.getInstalledApplications(0) 을 통해 핸드폰에 설치된 모든 앱 목록을 가져옵니다.

    그다음, filter 함수를 통해 시스템 앱과 업데이트된 시스템 앱을 제외한 사용자가 직접 설치한 앱 목록만 가져옵니다.

    여기서 시스템 앱은 전화 앱, 메시지 앱, 카메라 앱처럼 핸드폰에 기본적으로 설치된 앱을 의미합니다.

     

    for(app in requiredApps) {
        val appName = app.loadLabel(packageManager).toString()
        val appIcon = app.loadUnbadgedIcon(packageManager)
        val appPackageName = app.packageName
    }

     

    ApplicationInfo에는 앱에 대한 다양한 정보가 들어 있습니다. loadLabel(packageManager) 을 통해서 앱 이름을 가져올 수 있고, loadUnbadgedIcon(packageManager) 을 통해 앱 아이콘을 가져올 수 있습니다. 또한, 고유 값으로 활용할 수 있는 packageName으로 패키지명도 가져올 수 있습니다. 참고로, 고유값으로 활용할 수 있는 키(key) 나 id 를 설정할 때는 앱 이름은 겹칠 수 있기 때문에 패키지명을 사용하는 것이 더 적절합니다.

     

    활용 방법(예시 화면)

    이후에는 해당 데이터를 data class로 만든 후 리사이클러뷰의 어댑터에 연결하는 방식으로 UI 화면에 띄울 수 있습니다.

    해당 코드로 어떤 화면을 만들 수 있을까요?

     

    활용 예시 1

     

    활용 예시 2

     

     

    1. loadUnbadgedIcon(packageManager) 메소드를 통해 가져온 앱 아이콘을 GridLayout 형식의 리사이클러뷰를 통해 UI 화면에 표시할 수 있습니다.

    2. 앱 아이콘과 함께 loadLabel(packageManager) 메소드를 통해 가져온 앱 이름도 같이 UI 화면에 표시할 수 있습니다.

     

     

    이 코드를 이용하여 원하는 다양한 앱 프로젝트에 적용해보면 좋을 것 같습니다. 도움이 되셨다면 하트 한번씩 부탁드립니다.🙂

Designed by Tistory.