Intent
Intent
란?
Intent
는 앱 구성 요소 간 정보를 전달할 수 있는 메시지 객체다. 안드로이드 앱의 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")
}
}
Intent
에 putExtra()
로 정보를 전달하여 다음 액티비티가 수신할 수 있다.
서비스 시작, 바인드
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