(kotlin) Intent

박용석·2023년 8월 2일
1

인텐트

인텐트(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)
            }
        }
    }

}
profile
슬기로운 개발 활동

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기