반응형
내 앱에서 다른 앱의 활성화시키려고 할 때 그 앱이 현재 디바이스에 설치가 되어있는지 확인할 필요가 있습니다. 이번에는 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>
반응형
'개발 > Android' 카테고리의 다른 글
[Android] ViewModel 에서 Activity, Fragment 데이터 공유하기 (0) | 2022.02.16 |
---|---|
[Android] 실시간 데이터 처리를 위한 STOMP 사용하기 (Kotlin) (0) | 2022.01.26 |
[Android] Fragment에서 View Binding 사용 시 주의사항 (0) | 2022.01.03 |
[Android] Retrofit - API 통신을 쉽게 구현해보자 (0) | 2021.12.16 |
[Android] Splash 화면 구현하기 (by Kotlin) (0) | 2021.10.13 |
댓글