728x90
반응형
Intent
- Intent는 Android에서 컴포넌트 간(예: Activity, Service, BroadcastReceiver)의 통신을 담당하는 객체
- 다른 화면으로 이동하거나 데이터를 전달할 때 사용
Explicit Intent (명시적 인텐트)
- 특정 컴포넌트를 직접 지정하여 실행하는 방식
- 예: 같은 앱 내부에서 Activity 간 이동
예제: 명시적 인텐트로 Activity 전환
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
SecondActivity로 화면을 전환
예제: 데이터 전달과 함께 Activity 전환
val intent = Intent(this, SearchActivity::class.java)
intent.putExtra("city_name", "Seoul")
startActivity(intent)
예제: Service 시작
val intent = Intent(this, MyService::class.java)
startService(intent)
예제: BroadcastReceiver 실행
val intent = Intent(this, MyReceiver::class.java)
sendBroadcast(intent)
Implicit Intent (암시적 인텐트)
- 특정 컴포넌트를 직접 지정하지 않고, Andoird 시스템이 해당하는 앱을 찾아서 실행하는 방식
- 예: 웹페이지 열기, 전화 걸기, 지도 보기, 카메라 실행 등
예제: 웹페이지 열기
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com"))
startActivity(intent)
예제: 전화 걸기
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:01012345678"))
startActivity(intent)
예제: 지도 열기
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.7749,-122.4194"))
startActivity(intent)
예제: 갤러리에서 이미지 선택
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, REQUEST_IMAGE_PICK)
예제: 카메라 실행
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivity(intent)
Intent를 이용한 데이터 전달
- 기본 데이터 전달 (putExtra)
- Activity 간 데이터를 전달할 때 사용
예제: MainActivity에서 SearchActivity로 데이터 전달
val intent = Intent(this, SearchActivity::class.java)
intent.putExtra("city_name", "Seoul")
intent.putExtra("temperature", 22)
startActivity(intent)
예제: SearchActivity에서 데이터 받기
val cityName = intent.getStringExtra("city_name")
val temperature = intent.getIntExtra("temperature", 0) // 기본값 0
복잡한 데이터 전달 (Parcelable & Serializable)
- 객체를 전달할 때는 Parcelable 또는 Serializable을 사용
예제: Parcelable을 사용한 데이터 전달
@Parcelize
data class CityWeather(val cityName: String, val temperature: Int) : Parcelable
val cityWeather = CityWeather("Seoul", 22)
val intent = Intent(this, SearchActivity::class.java)
intent.putExtra("weather", cityWeather)
startActivity(intent)
val cityWeather = intent.getParcelableExtra<CityWeather>("weather")
Intent로 결과받기 (startActivityForResult)
- 결과를 받아와야할 때 사용 (예: 갤러리에서 사진 선택)
예제: GalleryActivity 실행 후 결과받기
val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(intent, REQUEST_IMAGE_PICK)
예제: onActivityResult에서 결과 처리
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
val imageUri: Uri? = data?.data
imageView.setImageURI(imageUri)
}
}
startActivityForResult는 Activity Result API로 대체 가능
val getContent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
imageView.setImageURI(uri)
}
getContent.launch("image/*")
Intent를 이용한 브로드캐스트 (sendBroadcast)
- BroadcastReceiver를 통해 앱 전체에서 특정 이벤트를 감지하 수 있다
예제: 브로드캐스트 송신
val intent = Intent("com.example.weatherapp.WEATHER_UPDATE")
sendBroadcast(intent)
예제: AndroidManifest.xml에서 Receiver 등록
<receiver android:name=".WeatherUpdateReceiver">
<intent-filter>
<action android:name="com.example.weatherapp.WEATHER_UPDATE" />
</intent-filter>
</receiver>
예제: 브로드캐스트 리시버 코드
class WeatherUpdateReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Toast.makeText(context, "날씨 업데이트됨!", Toast.LENGTH_SHORT).show()
}
}
728x90
반응형
'안드로이드 학습(Kotlin)' 카테고리의 다른 글
26. 디버깅(Debugging)과 Profiler 활용 (1) | 2025.02.19 |
---|---|
25. 아키텍처의 이해 (MVC, MVP, MVVM, Clean) (0) | 2025.02.19 |
24. Thread와 Handler (AsyncTask, RxJava, Coroutine, Handler) (1) | 2025.02.14 |
23. 네트워크 통신 활용 (Retrofit) (1) | 2025.02.14 |
ViewModel이란? (0) | 2025.02.14 |