Development record of developer who study hard everyday.

, ,

안드로이드 앱, 패키지 설치 확인하는 방법

회사에서 웹패키징 업무를 하다보면 다른 앱을 띄워야할 경우가 왕왕 생긴다.

그럴 때 마다 intent 스키마로 url이 넘어오는 경우도 있고 카드결제의 경우에 결제앱의 고유 스키마로 url이 넘어오는 경우도 있다.

이럴 때마다 앱이 설치되어있는지 확인 후에 해당 앱을 띄울지 마켓으로 화면을 보낼지를 결정해야한다.

안드로이드에서 기기에 특정 앱이 설치되어있는지 어떻게 확인할까?


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)는 전달된 패키지명에 대한 PackageInfo 객체를 가져오는 함수이다.

가져오는 과정에서 문제가 발생하면 PackageManager.NameNotFoundException을 throw한다.

try catch문을 활용해서 앱이 설치되어있는지 유무를 판단하면된다.

flags 매개변수에 0을 전달했는데, 이는 사용가능한 App을 대상으로 정보를 얻기위해 설정을 해준다.

더 많은 상수 값은 안드로이드 공식문서를 검색해보도록하자!


2.

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

val intent : Intent =  packageManager.getLaunchIntentForPackage(packageName)

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

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

앱이 기기에 설치되어있지 않으면 null을 반환한다.

널이 아닌 값을 반환하면 intent를 이용하여 바로 해당 앱을 띄워주면 된다.

(예: startActivity() 사용)


👿 Android11 이상부터 다른 앱과 상호작용이 필요할 때는 매니페스트 파일에 <queries> 요소를 추가해주어야한다.


	
<manifest>
    <queries>
        <package android:name="com.google.android.apps.maps"></package>
    </queries>
</manifest>
Share:

댓글 없음:

댓글 쓰기