인텐트(Intent)는 일종의 메시지 객체
이것을 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드 캐스트리시버)로 작업을 요청 할수 있다.
1). 명시적 인텐트(Explicit Intent)
시작 할 구성 요소의 이름을 지정하지 않고 인텐트 객체에 설정하고 이를startActivity() 또는 startService()에 넘긴다.
예시 코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height=“match_parent"
android:gravity = “center”
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="첫번째 액티비티 입니다."
android:id="@+id/textView" />
<Button
android:layout_width=“wrap_content"
android:layout_height="wrap_content"
android:text="두번째 액티비티 시작하기"
android:id="@+id/buttonFirstActivity"
android:layout_marginTop="43dp" />
</LinearLayout>
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val btn = findViewById<Button>(R.id.buttonFirstActivity)
btn.setOnClickListener{
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="두번째 액티비티 입니다."
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="닫기"
android:id="@+id/buttonSecondActivity"
android:layout_marginTop="43dp" />
</LinearLayout>
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val btn = findViewById<Button>(R.id.buttonSecondActivity)
btn.setOnClickListener{
finish()
}
}
}
2). 암시적 인텐트(Implicit Intent)
시작 할 구성 요소의 이름을 지정하지 않고 일반적인 작업 (예,전화걸기,지도보기등)을 인텐트 객체에 설정하고 이를 startActivity()에 넘긴다.
예시 코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
<TextView
... />
<Button
... />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="다이얼 작업 시작하기"
android:id="@+id/buttonDialActivity"
android:onClick="doOnBtnClick" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="지도보기 작업 시작하기"
android:id="@+id/buttonMapActivity"
android:onClick="doOnBtnClick" />
</LinearLayout>
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// 이전 코드와 동일
}
/**
* 버튼 클릭 이벤트 처리
* @param view : 클릭된 버튼 객체
*
* 클릭된 버튼 객체가 무엇인지를 id를 통해 인지하여, 두 가지 다른 인텐트 객체를 생성
*/
fun doOnBtnClick(view: View) {
when (view.getId()) {
R.id.buttonDialActivity -> { // 114 전화번호로 다이얼 작업을 수행할 수 있도록 인텐트 설정
val call_intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
startActivity(call_intent)
}
R.id.buttonMapActivity -> { // 주어진 위도,경도 위치로 지도를 보여줄 수 있도록 인텐트 설정
val map_intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.565350, 127.01445"))
startActivity(map_intent)
}
}
}
}
좋은 정보 얻어갑니다, 감사합니다.