본문 바로가기
Android 개발/Android

getLaunchIntentForPackage 로 다른 앱을 실행 하는 방법 # query Android 11

by Developer88 2023. 4. 20.
반응형

오늘은 안드로이드 앱에서 다른 앱을 launch 시키는 방법을 정리해 보도록 하겠습니다.

 

1. Query Manifest 적용

Android11(API30)이 발표된 이래로,

앱내에서 다른 앱을 실행하는 경우 Manifest에서,

다른 앱에 대한 패키지 명을 명시해 주어야만 합니다.

예전에는 없었던 작업이므로, 간혹 오래된 앱들은 이것이 선언되지 않아서,

기능이 작동하지 않을 수 있습니다.

혹시 잘 되던 기능이 않되고 있다면 이 부분을 체크해 주어야 합니다.

manifest 에 선언하는 것이므로, Enum 클래스를 사용할 수 없습니다.

하드코딩해야 하므로, 테스트를 반드시 해 주어야 합니다.

 

<manifest ...>
    ...
    <queries>
        <package android:name="대상앱의 패키지명" />
    </queries>
    <application ...>
        ...
    </application>
</manifest>

 

 

2. 다른 앱을 launch 하는 방법

이제 준비가 되었으니 코드에서 다른 앱을 실행시켜야 하는데요.

이 때는 getLaunchIntentForPackage() API를 이용해 주면 됩니다.

 

 

만약 getLaunchIntentForPackage의 결과 null 이 나오면,

아래와 같이 playstore링크를 넣어서 Activity를 launch 해서,

설치를 할 수 있도록 도와줍니다.

 

var intent = context.packageManager.getLaunchIntentForPackage(packageName)
if(intent == null) {
    val link = "https://play.google.com/store/apps/details?id=" + packageName
    intent = Intent(Intent.ACTION_VIEW).apply {
        data = Uri.parse(link)
    }
    context.startActivity(intent)
    return
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)

 

 

 

위의 코드에서 getLaunchIntentForPackage를 실행시켯는데,

intent 가 null이 나오는 경우는 다음 2가지 중 하나입니다.

 

  • 위의 1번에서 다룬 query가 선언되지 않은 경우
  • 앱이 기기내에 설치되지 않은 경우

첫번째 경우의 수도 많으므로, 반드시 manifest에 선언이 잘 되었는지 확인해 보아야 합니다.

 

728x90

댓글