본문 바로가기
개발/Android

[Android] 앱, 패키지 설치 여부 확인하기

by tempus 2022. 1. 6.
반응형

내 앱에서 다른 앱의 활성화시키려고 할 때 그 앱이 현재 디바이스에 설치가 되어있는지 확인할 필요가 있습니다. 이번에는 PackageManager를 통해 설치 여부를 확인하는 방법을 알아보겠습니다.

 

아래의 방법을 사용하기 위해서는 기본적으로 앱의 패기지명을 알아야 합니다.

 

방법 1

val packageName :  String = "com.google.android.apps.maps"

fun isAppInstalled(packageName : String, packageManager : PackageManager) : Boolean{
    	return try{
            packageManager.getPackageInfo(packageName, 0)
            true
        }catch (ex : PackageManager.NameNotFoundException){
            false
        }
}


//use
val packageManager: PackageManager = packageManager
if(isAppInstalled(packageName, packageManager)){
    //설치
}else{
    //미설치
}
           

getPackageInfo(packageName : String, flags : Int)는 전달된 package name에 대한 PackageInfo 객체를 가져오기 위한 함수입니다. null 값을 허용하지 않기 때문에 가져오지 못할 시에 PackageManager.NameNotFoundException 를 throw 합니다.

 

flags의 0은 현재 설치되어 있고, 사용 가능한 App을 대상으로 정보를 얻기 위해 설정을 해줍니다. 이외에도 다음과 같은 값들이 있습니다.

  • PackageManager.MATCH_UNINSTALLED_PACKAGES : uninstalled 상태에 있는 패키지 정보도 가져온다.
  • PackageManager.MATCH_DISABLED_COMPONENTS : disabled 상태에 있는 패키지 정보도 가져온다.

 

 

방법 2

val packageName :  String = "com.google.android.apps.maps"

val intent : Intent =  packageManager.getLaunchIntentForPackage(packageName)

if(intent == null){
    //미설치
}else{
    //설치
}

getLaunchIntentForPackage(packageName : String)은 패기지명에 해당하는 앱을 intent에 담아주는 함수입니다.

 

주의사항!

개인 정보의 중요성이 높아지면서 Android 11 이상을 타겟팅하는 앱의 경우 다른 앱과 상호작용이 필요할 때는 AndroidManifest.xml<queries>요소를 추가해야 합니다.

<manifest>
    <queries>
        <package android:name="com.google.android.apps.maps"/>	// 패키지명
    </queries>
</manifest>

 

반응형

댓글


loading