다른 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를 사용해서 만들어보려고한다.
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)
})
}
}
|
결과화면
아래와 같이 실행할 앱을 선택하는 화면이 뜬다.
'안드로이드' 카테고리의 다른 글
[스크랩] 스레드 - 핸들러 - 루퍼(Looper) (0) | 2020.01.12 |
---|---|
안드로이드 앱 상단 액션바(Action Bar) 지우기 (0) | 2020.01.08 |
RecyclerView 선택을 커스터마이징하기 (0) | 2019.12.31 |
Kotlin ListView 구현하기 (0) | 2019.12.28 |
액티비티 (Activity) - 4대 컴포넌트 (0) | 2019.12.27 |