프로그래밍/Android

[안드로이드] 패키지명(Package name)으로 앱 실행하기

Lou Park 2021. 1. 18. 02:27

패키지명을 받아서 앱을 띄워주어야 할 때가 있습니다. 사용자의 휴대폰에 해당 앱이 깔려있다면 실행하고, 깔려있지 않고 Google Play는 이용할 수 있다면 구글 플레이의 앱 상세 페이지로, 만약에 그렇지도 않다면 구글 플레이 웹에서 앱 상세 페이지로 이동 시키는 함수입니다.

/**
 * 패키지 네임을 가진 앱을 실행합니다. 없으면 구글 플레이로 이동합니다.
 * @param packageName 대상 앱의 패키지 네임
 */
fun launch(context: Context, packageName: String?) {
    val launchIntent = context.packageManager.getLaunchIntentForPackage(packageName ?: "")
    if (launchIntent != null) {
        launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        context.startActivity(launchIntent)
    } else {
        try {
            context.startActivity(
                Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("market://details?id=$packageName&referrer=${context.packageName}")
                )
            )
        } catch (anfe: ActivityNotFoundException) {
            context.startActivity(
                Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("https://play.google.com/store/apps/details?id=$packageName&referrer=${context.packageName}")
                )
            )
        }
    }
}