Intent
: μΌμ’ μ λ©μμ§ κ°μ²΄
- μ΄κ²μ μ΄μ©ν΄ λ€λ₯Έ μ± κ΅¬μ±μμ(μ‘ν°λΉν°, μλΉμ€, λΈλ‘λμΊμ€νΈ 리μλ²)λ‘ μμ
μ μμ²ν μ μμ
- startActivity(intent), startService(intent), sendBroadcast(intent)
- μλλ‘μ΄λ μ±μ κ΅¬μ± μμλ€ μ¬μ΄μμ μ€νμ μμνκ±°λ μ 보λ₯Ό μ λ¬νλ μν μ ν¨
1. Intentμ μ ν
1) λͺ μμ μΈν νΈ (explicit intent)
: νΉμ ν μ»΄ν¬λνΈλ₯Ό μ§μ μ μΌλ‘ νΈμΆν λ μ¬μ©λλ μΈν νΈ
- μ΄ λ°©λ²μΌλ‘ κ°λ°μλ μΈν
νΈ κ°μ²΄μ μμνκ³ μ νλ κ΅¬μ± μμμ μ΄λ¦μ λͺ
ννκ² μ€μ νκ³ ,
startActivity() λλ startService() λ©μλλ₯Ό ν΅ν΄ ν΄λΉ μ»΄ν¬λνΈλ₯Ό μ€νμν΄
(μμ€ν
μ΄ μ‘ν°λΉν° μΆλ‘ ν νμ μμ΄ κ°λ°μκ° μ§μ μ§μ )
//μ£Όλ‘ μ± λ΄λΆμμ λ€λ₯Έ μ‘ν°λΉν°λ μλΉμ€λ₯Ό μμν λ μ¬μ©λ¨.
(ex. λ©μΈ μ‘ν°λΉν°μμ μ¬μ©μμ μ
λ ₯μ λ°μ μΈλΆ μ 보λ₯Ό νμνλ μλ‘μ΄ μ‘ν°λΉν°λ₯Ό λμΈ λ)
2) μμμ μΈν νΈ
: νΉμ ν μ»΄ν¬λνΈλ₯Ό λͺ
μνμ§ μκ³ ,
μννκ³ μ νλ μΌλ°μ μΈ μμ
μ μΈν
νΈ κ°μ²΄μ μ€μ ν΄ startActivity() λ©μλμ λκΉ
- μλλ‘μ΄λ μμ€ν
μ μ΄ μΈν
νΈλ₯Ό μ²λ¦¬ν μ μλ λͺ¨λ μ ν리μΌμ΄μ
μ κ²μν΄
μ ν©ν μΈν
νΈ νν°λ₯Ό κ°μ§ μ»΄ν¬λνΈλ₯Ό μ°Ύμ μ€νμν΄
(1) μΈν
νΈ νν°
: νΉμ μΈν
νΈμ λ°μνλ μ‘ν°λΉν°, μλΉμ€ λλ λΈλ‘λμΊμ€νΈ 리μλ²μ λ₯λ ₯μ μ μ
= μ΄λ€ μΈν
νΈλ₯Ό μμ ν μ€λΉκ° λμ΄μλμ§λ₯Ό λνλ΄λ μ€μ
- λ³ΈμΈμ μ±μ΄ μμ ν μ μλ μμμ μΈν
νΈκ° 무μμΈμ§ μκΈ° μν΄μλ
κ° μ± κ΅¬μ± μμμ λν νλ μ΄μμ μΈν
νΈ νν°λ₯Ό <intent_filter> μμλ‘ λ§€λνμ€νΈ νμΌμ μ μΈν΄μΌ ν¨
- κ° μΈν νΈ νν°κ° μΈν νΈμ μμ , λ°μ΄ν° λ° μΉ΄ν κ³ λ¦¬λ₯Ό κ·Όκ±°λ‘ μ΄λ μ νμ μΈν νΈλ₯Ό μμ ν μ§λ₯Ό κ²°μ ν¨
// AndroidManifest.xml μμ android:name μμ± κ°μ΄ SecondActivityμΈ <activity>μμ νμμ <intent-filter> νκ·Έ μΆκ°
<activity
android:name=".SecondActivity"
android:label="Second Activity"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.DIAL"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="tel"/>
</intent-filter>
</activity>
// actionμ action.DIAL : λ€μ΄μΌμ λ°μ μ μλ μ±
// data -> λ°μ΄ν°λ telμ ν΅ν΄ λ°μκ²μ
// android:name = μλλ‘μ΄λ μμ€ν μμ ν΄λΉ κ΅¬μ± μμλ₯Ό μ°Ύμ μ€νν λ μ¬μ©. (κ΅¬μ± μμμ μ€μ ꡬνλ ν΄λμ€ μ΄λ¦)
// android:label = μ±μ νλ©΄μ νμλλ ν μ€νΈ. μ¬μ©μ μΈν°νμ΄μ€μμ ν΄λΉ κ΅¬μ± μμλ₯Ό μλ³ν λ μ¬μ©
| <action> | μμ λλ μΈν
νΈμ μ‘μ
μ μ§μ (μλλ‘μ΄λμμλ μ‘μ μ λ°λΌ μμ€ν μ΄ μ΄λ€ λμμ μνν΄μΌ νλμ§λ₯Ό κ²°μ ) //ex. android.intent.action.VIEWλ λ°μ΄ν°λ₯Ό 보μ¬μ£Όλ μ‘μ |
| <category> | μΈν
νΈμ μΆκ°μ μΈ μ 보λ₯Ό μ 곡 μ΄λ₯Ό ν΅ν΄ μμ€ν μ΄ μΈν νΈλ₯Ό μ²λ¦¬νλ λ°©λ²μ λ μΈλΆμ μΌλ‘ μ μ΄ κ°λ₯ // category android:name="android.intent.category.LAUNCHER" -> μ± μ€ν μ κ·Έ μ‘ν°λΉν°κ° λ¨Όμ μ€νλ¨ |
| <data> | μΈν
νΈμ κ΄λ ¨λ λ°μ΄ν°λ₯Ό μ§μ URI, MIME, νμΌ νμ₯μ λ±μ ννλ‘ μ§μ λ μ μμ // ex. tel μ€ν€λ§λ₯Ό κ°μ§ λ°μ΄ν°λ₯Ό λ€λ£¨κΈ° μν΄ <data android:scheme='tel'/> |
(2) μΌλ°μ μ¬μ©λ²
: μμμ μΈν
νΈλ μ£Όλ‘ λ€λ₯Έ μ±μ μ»΄ν¬λνΈλ₯Ό μ€νμν€λ λ° μ¬μ©λ¨
ex. μ¬μ©μκ° 'μ§λ 보기'λ₯Ό μμ²ν λ, ν΄λΉ μμ
μ μ²λ¦¬ν μ μλ λͺ¨λ μ± μ€ μ¬μ©μκ° μ νν μ μκ² λͺ©λ‘ μ 곡
2. μΈν νΈ κ°μ²΄ λΆμνκΈ°
1) μ»΄ν¬λνΈ μ΄λ¦
: νκ² μ»΄ν¬λνΈμ μ΄λ¦μ λͺ
μν΄, μΈν
νΈκ° μ λ¬λ μ νν λμμ μ§μ
ex. new Intent(context, TargetActivity.class) μμ TargetActivity.class κ° μ»΄ν¬λνΈ μ΄λ¦μ
- μ»΄ν¬λνΈ μ΄λ¦μ΄ μμΌλ©΄ μΈν νΈλ μμμ μΌλ‘ μ²λ¦¬λκ³ , μμ€ν μ΄ μ μ ν λμμ μ°Ύμ
2) μ‘μ
: μΈν
νΈκ° μνν΄μΌ ν μΌλ°μ μΈ μμ
μ μ μ. μνλμ΄μΌ ν μμ
μ λνλ΄λ λ¬Έμμ΄
- ex. Intent.ACTION_VIEW : μ¬μ©μμκ² λ°μ΄ν°λ₯Ό 보μ¬μ€ λ μ¬μ©λ¨
- ex. Intent.ACTION_DIAL : μ ν λ€μ΄μΌμ μ΄κΈ° μν΄ μ¬μ©
3) λ°μ΄ν°
: μμ
μ μννλ λ° νμν λ°μ΄ν°μ URI(μ 보μ κ³ μ ν λͺ
μΉ. urlλ³΄λ€ μμ)λ₯Ό μ§μ ν¨
ex. Uri.parse("tel:12345") : μ ν μ±μ μ νλ²νΈ λ°μ΄ν°λ₯Ό μ 곡
| μμ (μ‘μ ) | λ°μ΄ν° | μ€λͺ |
| ACTION_VIEW | μΉνμ΄μ§λ₯Ό νμ | |
| ACTION_CALL | tel:114 | 114λ² μ νλ²νΈλ‘ μ νμ°κ²° μμ |
| ACTION_DIAL | tel:114 | 114λ² μ νλ²νΈλ‘ μ νκ±ΈκΈ° νλ©΄ νμ |
- λ°μ΄ν°λ λ³΄ν΅ Uri κ°μ²΄λ‘ μ‘μ κ³Ό κ²°ν©ν΄ μ¬μ©λ¨
4) μΉ΄ν
κ³ λ¦¬
: μΈν
νΈμ μ νμ λ ꡬ체μ μΌλ‘ μ§μ νμ¬, μ΄λ€ μ»΄ν¬λνΈκ° μ²λ¦¬ν μ μλμ§ μλ €μ€
- ex. Intent.CATEGORY_HOME : ν νλ©΄ μ ν리μΌμ΄μ μ μμν λ μ¬μ©λ¨
| μΉ΄ν κ³ λ¦¬ | μ€λͺ |
| CATEGORY_BROWSABLE | λμ μ‘ν°λΉν°κ° μΉλΈλΌμ°μ μ μν΄ μμλμ΄μ μ΄λ―Έμ§μ κ°μ λ°μ΄ν°λ₯Ό ννν μ μμ |
| CATEGORY_LAUNCHER | μ΄ μ‘ν°λΉν°κ° μμ μ μ΅μ΄ μ‘ν°λΉν°μ΄κ³ , μ΄κ²μ΄ μμ€ν μ μ ν리μΌμ΄μ μμ κ΄λ¦¬μμ λͺ©λ‘μΌλ‘ κ²μ¬λμ΄ μμ |
5) μμ€νΈλΌ
: 볡μ‘ν λ°μ΄ν°λ₯Ό μΈν
νΈμ μ λ¬νκΈ° μν ν€-κ° μμ μΆκ° μ 보
ex. intent.putExtra("extra_key", "value") μμ "extra_key" λ μ λ¬ν λ°μ΄ν°μ ν€μ΄κ³ , "value"λ μ€μ κ°μ
- μμ€νΈλΌλ₯Ό ν΅ν΄ κΈ°λ³Έ νμ λΆν° Serializable κ°μ²΄κ°μ§ λ€μν λ°μ΄ν° μ λ¬ κ°λ₯
3. λͺ μμ μΈν νΈλ‘ λ€λ₯Έ μ‘ν°λΉν° μμνκΈ°
- λͺ
μμ μΈν
νΈλ νΉμ ν μ‘ν°λΉν°λ₯Ό μμν λ μ¬μ©λ¨.
(μλλ‘μ΄λλ μ΄λ₯Ό ν΅ν΄ νμ¬ μ‘ν°λΉν°μμ λ€λ₯Έ μ‘ν°λΉν°λ‘ μ νν μ μμ)
// νμ¬ μ‘ν°λΉν°μμ AnotherActivityλ₯Ό μμνκΈ° μν λͺ
μμ μΈν
νΈ μμ±
val intent = Intent(this, AnotherActivity::class.java)
// μΈν
νΈμ λ°μ΄ν° μΆκ° (μ΅μ
)
intent.putExtra("key", "value")
// AnotherActivity μμ
startActivity(intent)
1) μΈν νΈ μμ± : Intent ν΄λμ€μ κ°μ²΄λ₯Ό μμ±ν¨
- λ§€κ°λ³μ : νμ¬ μ»¨ν μ€νΈ (this) , μμνκ³ μ νλ μ‘ν°λΉν°μ Class κ°μ²΄
2) λ°μ΄ν° μ λ¬ (μ νμ¬ν) : putExtra λ©μλλ₯Ό μ¬μ©ν΄ μΈν νΈμ ν€-κ° μμΌλ‘ μ΄λ£¨μ΄μ§ μΆκ° λ°μ΄ν° μ½μ κ°λ₯
- μμλ μ‘ν°λΉν°μμ μ΄ λ°μ΄ν°λ₯Ό μ¬μ©ν μ μμ
3) μ‘ν°λΉν° μμ : startActivity λ©μλλ₯Ό νΈμΆν΄ μΈν νΈλ₯Ό μ¬μ©ν¨
- μ΄ νΈμΆμ΄ μ€νλλ©΄ μλλ‘μ΄λ μμ€ν μ λͺ μλ μΈν νΈμ λ°λΌ AnotherActivityλ₯Ό μμν¨
-> νμ¬ μ‘ν°λΉν°μμ λ€λ₯Έ μ‘ν°λΉν°λ‘μ μ νμ λͺ ννκ² μ μ΄ κ°λ₯ (μ±μ νλ¦ κ΄λ¦¬μ νμμ μΈ κΈ°λ₯)
activity μΆκ° => app > new > Activity > Empty Activity
1) activity_first.xml νμΌ μμ
<?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>
2) activity_Second.xml μμ
<?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>
3) FirstActivity μμ
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)
}
}
}
4) SecondActivity μμ
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()
}
}
}
4. μμμ μΈν νΈλ‘ λ€λ₯Έ μ‘ν°λΉν° μμνκΈ°
: μμμ μΈν νΈλ‘ λ€λ₯Έ μ‘ν°λΉν°λ₯Ό μμνκΈ° μν΄μλ μΈν νΈ μμ μμ κ³Ό λ°μ΄ν°λ₯Ό μ§μ ν΄μΌ ν¨
ex. 114 λ²νΈλ‘ λ€μ΄μΌ μμ
μ μνν μ μλ μ‘ν°λΉν° μ€νμν€κΈ° μν΄ call_intent μμ± ν startActivity()λ©μλμ μ λ¬
tel:114 = μ νλ²νΈ 114μ URI κ°μ²΄
val call_intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
startActivity(call_intent)
<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"/>
package com.example.acrivityintent2
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Button
//import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
//import androidx.core.view.ViewCompat
//import androidx.core.view.WindowInsetsCompat
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//enableEdgeToEdge()
setContentView(R.layout.activity_first)
// ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
// val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
// v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
// insets
// }
val btn = findViewById<Button>(R.id.buttonFirstActivity)
btn.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
fun doOnBtnClick(view: View){
when(view.id){
R.id.buttonDialActivity -> {
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)
}
}
}
}
μ½λ μ λ ¬ -> ctrl + alt + L