Intent

1 minute read

Intent란?

Intent는 앱 구성 요소 간 정보를 전달할 수 있는 메시지 객체다. 안드로이드 앱의 4대 구성 요소는 다음과 같다.

  1. 액티비티
  2. 서비스
  3. 브로드캐스트 리시버
  4. 콘텐츠 제공자

이들 간 정보를 전달할 수 있으며 예제는 다음과 같다.

액티비티 시작

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button = findViewById<Button>(R.id.btn_new_activity)
        button.setOnClickListener {
            val intent = Intent(this, AnotherActivity::class.java)
            startActivity(intent)
        }
    }
}

Intent를 사용하여 새로운 액티비티를 시작할 수 있다.

액티비티 간 정보 전달

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button = findViewById<Button>(R.id.btn_new_activity)
        button.setOnClickListener {
            val intent = Intent(this, AnotherActivity::class.java).apply {
                putExtra("SOME_STRING", "From main activity")
            }
            startActivity(intent)
        }
    }
}

class AnotherActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_another)
        val textView = findViewById<TextView>(R.id.tv_main_text)
        val intent = intent
        textView.text = intent.getStringExtra("SOME_STRING")
    }
}

IntentputExtra()로 정보를 전달하여 다음 액티비티가 수신할 수 있다.

서비스 시작, 바인드

private val intent = Intent(context, LocationService::class.java)

fun startService() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(intent)
    } else {
        context.startService(intent)
    }
}

fun bindService() {
    Intent(context, LocationService::class.java).also { intent ->
        context.bindService(intent, serviceConnection, 0)
    }
}

서비스의 시작과 바인드 또한 Intent를 사용하여 이루어진다.

브로드캐스트 전달

Intent().also { intent ->
    intent.setAction("com.example.broadcast.MY_NOTIFICATION")
    intent.putExtra("data", "Notice me senpai!")
    sendBroadcast(intent)
}

브로드캐스트에 메시지를 전달할 때도 Intent를 사용해 이루어진다.

Comments