안드로이드

다른 앱의 Activity 열기

start1a 2020. 1. 2. 16:12

다른 Activity를 열기 위해 명시적 Intent를 생성해 열었다. 다른 앱의 Activity를 열려면 어떻게 해야 할까? 암시적 Intent를 이용하는 것이다. 해당 앱이 직접 Activity를 열 수 있도록 공개하는 경우도 있지만 대부분 보안적인 이유로 암시적 Intent로 우회적으로 요청하도록 설정한다.

 

사용하는 법은 해당 앱들이 Action이라는 것을 안드로이드 시스템에 등록해두면 그 앱을 호출하는 Activity가 그 Action과 데이터를 Intent에 담아 Activity를 호출하게 하는 것이다.

 

예) 인터넷 링크를 열고 싶다면

Intent(ACTION명, 넣을 데이터) 구조로 넣었다. 데이터는 실행할 웹 주소를 Uri로 파싱하였다. startActivity를 쓰면 안드로이드 시스템에서 적절한 앱의 Activity를 찾아 실행한다.

1
2
 var intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
            startActivity(intent)
 

 

 

다양한 표준 Activity ACTION 정의값

Intent.ACTION_VIEW 데이터를 전달하여 표시

Intent.ACTION_SEND 데이터를 공유

Intent.ACTION_DIAL 전화번호를 전달하여 다이얼 화면을 띄움

Intent.ACTION_GET_CONTENT 파일 데이터의 사본을 가져옴

Intent.ACTION_OPEN_DOCUMENT 파일을 열어 직접 핸들링

Intent.ACTION_WEB_SEARCH 웹 검색 화면을 띄움

등등

이 외에도 표준이 아닌 다른 클래스에서 제공하는 ACTION도 존재한다.

 

 

여기서 버튼들로 ACTION_VIEW, ACTION_SEND를 사용해서 만들어보려고한다.

 

버튼 2개 생성

Move 버튼은 google 주소로 이동한다. 사용할 에뮬레이터에서 미리 구글 아이디를 로그인해두면 구글 사이트를 바로 띄울 수 있다.

Share 버튼은 ACTION_SEND으로 지정하고 전달할 데이터의 type으로 표준 텍스트의 mimetype인 "text/plain"을 설정한다. putExtra에 Intent의 제목, 텍스트 상수로 지정하고 데이터를 넣고 startActivity로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class MainActivity : AppCompatActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        MoveButton.setOnClickListener(View.OnClickListener {
            var intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
            startActivity(intent)
        })
 
        ShareButton.setOnClickListener(View.OnClickListener {
            val intent = Intent(Intent.ACTION_SEND)
            intent.type = "text/plain"
            intent.putExtra(Intent.EXTRA_SUBJECT, "제목s")
            intent.putExtra(Intent.EXTRA_TEXT, "내용입니다~")
            startActivity(intent)
        })
 
    }
}
 

 

결과화면

아래와 같이 실행할 앱을 선택하는 화면이 뜬다.

데이터 공유 버튼을 눌렀을 경우