-
핸드폰에 설치된 앱 불러오기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 화면에 표시할 수 있습니다.
이 코드를 이용하여 원하는 다양한 앱 프로젝트에 적용해보면 좋을 것 같습니다. 도움이 되셨다면 하트 한번씩 부탁드립니다.🙂
'Android' 카테고리의 다른 글
서버와 통신하기(retrofit) (0) 2025.03.16 외부 앱 접속 막기 (0) 2025.03.03 액티비티간 데이터 전달 - startActivityForResult (0) 2024.10.10 안드로이드 기본 앱 연동하기 - 지도 앱, 전화 앱 (0) 2024.10.03 안드로이드 기본 앱 연동하기 - 주소록 앱 (0) 2024.09.26