안드로이드 학습 - Intent

📚 Intent

👀 intent란?

  • intentActivity 의 메시지 객체입니다.
  • 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있습니다.
    • 액티비티 시작
      • 다른 액티비티로 이동
      • 다른 액티비티로 데이터 전달
    • 서비스 시작
    • 브로드캐스트 전달
  • 이 글에서는 Activity 이동과 데이터 전달에 대해서만 설명하겠습니다.

👀 Activity 실행

  • 현재 액티비티에서 다른 액티비티를 실행(이동)하기 위해서는 startActivity() 메서드를 호출해야 합니다.
  • 하지만 어떠한 의도(intent)를 가지고 액티비티를 시작(start) 할 건지 정의해야 합니다.
  • 따라서 아래의 코드와 같이 현재 액티비티(this)에서 두번째 액티비티(SecondActivity::class.java) 실행 이라고 실행할 액티비티를 명시적인 의도를 가지고 호출합니다. (여기서 ::class.java 는 자바(코틀린)파일에 대한 참조를 뜻합니다.)
val intent = Intent(this, SecondActivity::class.java)  
startActivity(intent)

👀 Intent 종류

👉 명시적 인텐트 (Explicit intents)

SecondActivity 라는 액티비티를 실행한다.

  • 앱이 작업을 수행할 Activity을 명확하게 알고 있을 때 사용합니다.
  • 인텐트를 충족하는 애플리케이션이 무엇인지 지정합니다.
  • 이를 위해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공합니다.
  • 명시적 인텐트는 일반적으로 앱 안에서 구성 요소를 시작할 때 씁니다. 시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문입니다.
  • 예를 들어, 사용자 작업에 응답하여 새로운 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것 등이 여기에 해당됩니다.

👉 암시적 인텐트 (Implicit intents)

사진 찍기 라는 작업을 수행할 액티비티를 실행한다.

  • 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성 요소가 이를 처리할 수 있도록 해줍니다.
  • 예를 들어 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청할 수 있습니다.

👀 다른 Activity로 데이터 전달

  • 다른 액티비티에 데이터를 전달하는 작업은 실행할 Activity 정보 와는 다르게 필수적인 작업이 아닙니다. 그래서 extra라는 이름이 붙는 메서드를 호출합니다.
  • 전달되는 데이터는 Bundle 객체로 key - value 구조로 전달됩니다.
val intent = Intent(this, SecondActivity::class.java).apply {
            putExtra("name", myName)
            putExtra("number", myNumber}
startActivity(intent)

👀 다른 Activity로부터 데이터 수신

  • 다른 액티비티로부터 데이터를 받기 위해서는 어떤 타입의 데이터인지 명확하게 표시해야 합니다. 따라서 Bundle.get데이터타입(key값) 을 통해 데이터를 받을 수 있습니다.
val myName = arguments?.getString("name")
val myNumber = arguments?.getInt("number")
  • 여기서 argumentsBundle 객체입니다.

👀 Activity로부터 데이터 가져오기

startActivityForResult()

👀 참고 사이트

  1. 공식 문서
  1. 블로그

좋은 웹페이지 즐겨찾기