Android Intent로 열기

윤예은·2022년 9월 6일

서론

packageManager, Intent 등을 사용하여 다른 앱을 여는 방법에 대해 정리해 보기로 하였다.

내 앱에서 열기

내 앱에서 어떤 Activity를 열고 싶을 때에는 아주 간단하게 액티비티 클래스를 가지고 바로 시작할 수 있다.

val intent = Intent(this@MainActivity,XXActivity::class.java)
startActivity(intent)

남의 앱 열기

1. 목적에 맞는, 기본 설정 된 앱 열기

val intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://www....")
startActivity(intent)

2. 가능한 앱 중 골라서 열기

val intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://www....")
val chooser = Intent.createChooser(intent, "브라우저 앱 고르기")
startActivity(chooser)

3. 원하는 앱을 찾아서 열기

Android 11(api version 30)부터는 Manifest에 명시한 앱만 검색해서 시작할 수 있게 변경이 되었다고 한다. 앱을 검색해서 열기 위해서는 지원할 앱을 미리 리스트업한 후에 먼저 작성하는 것이 필요할 듯하다.

<!--from android 11 (30) need this to query Intent of other apps-->
<queries>
	<package android:name="com.kakao.talk" />
</queries>
val intent = packageManager.getLaunchIntentForPackage("com.kakao.talk")
startActivity(intent)

4. 원하는 앱의 특정 Activity 열기

원하는 앱의 특정 Activity가 해당 앱의 Manifest에서 exported되어 있어야 한다. 그리고 Activity의 이름도 정확히 알아야만 한다.
-> 한마디로 그쪽에서 못하게 해놓았으면 우리는 아무것도 할 수가 없다는 뜻!
-> 자사 앱과 연동되게 하는 것으로 활용한다면 쏠쏠할 것으로 보인다.

var compName : ComponentName = 
//ComponentName([패키지명],[액티비티 패키지명])
ComponentName("com.jky.sig.mysigrecevactivity","com.jky.sig.mysigrecevactivity.RecevSecondActivity")
var intent : Intent = Intent(Intent.ACTION_MAIN)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
intent.setComponent(compName);
startActivity(intent)

https://developer.android.com/training/basics/intents/package-visibility
https://www.techmesto.com/find-android-app-package-name/
https://stackoverflow.com/questions/3872063/how-to-launch-an-activity-from-another-application-in-android
https://stackoverflow.com/questions/17400621/show-browser-list-when-opening-a-link-in-android
https://developer.android.com/training/basics/intents/sending?hl=ko
https://helloit.tistory.com/288

profile
안녕하세요!!

0개의 댓글