내 앱에서 다른 앱을 실행시키고자 할 때 그 앱이 현재 디바이스에 설치되어있는지 확인할 필요가 있다.
이럴 때에는 PackageManager를 통해서 설치 여부를 확인할 수가 있다.
우선 패키지명을 알아내야 한다.
https://play.google.com/store/apps
구글 플레이에 접속해서 당근마켓 앱을 검색했다고 가정해보자.
그럼 그림에서 볼 수 있듯이
com.towneers.www가 바로 당근마켓 앱의 패키지 주소이다.
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val towneersPackageName: String = "com.towneers.www"
if(isAppInstalled(towneersPackageName, packageManager)){
// 당근마켓이 설치되어있음!
}else{
// 당근마켓이 설치되어있지 않음!
}
}
private fun isAppInstalled(packageName: String, packageManager: PackageManager): Boolean {
return try {
packageManager.getPackageInfo(packageName, 0)
true
} catch (e : PackageManager.NameNotFoundException) {
false
}
}
}
참고로 여기 예제에서는 getPackageInfo 함수의 flag 값이 0으로 설정되어있는데,
MATCH_UNINSTALLED_PACKAGES 같은 플래그값을 설정하여 설치되지 않은 상태에 있는 패키지 정보도 가져올 수 있다.
https://developer.android.com/reference/android/content/pm/PackageManager
val towneersPackageName: String = "com.towneers.www"
val activityIntent = packageManager?.getLaunchIntentForPackage(towneersPackageName)?.let {
PendingIntent.getActivity(
this,
0,
it,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
}
다음은 getLaunchIntentForPackage 함수를 통해 해당 당근마켓 앱을 intent에 담아준 후 PendingIntent로 변환해주는 예제이다.