๐ก ์๋๋ก์ด๋์์ ํ์ด์ง ์ ํ๊ณผ ํ์ด์ง๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ๊ธฐ๋ฅ์ ํ๋ Intent์ ๋ํ์ฌ ํ์ตํ์์ต๋๋ค !
Intent
- ์ธํ ํธ๋ ์ฑ ์ปดํฌ๋ํธ๊ฐ ๋ฌด์์ ํ ๊ฒ์ธ์ง๋ฅผ ๋ด๋ ๋ฉ์์ง ๊ฐ์ฒด์ ๋๋ค.
- ๋ฉ์์ง๋ ์์ฌ์ํต์ ํ๊ธฐ ์ํด ๋ณด๋ด๊ณ ๋ฐ์ผ๋ฉฐ, ContentProvider๋ฅผ ์ ์ธํ ์๋๋ก์ด๋ 4๋ ์ปดํฌ๋ํธ๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ฉ๋ฉ๋๋ค.
- Activity, Service, BroadCast Receiver
- ์ธํ ํธ๋ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ํต์ ์ ๋งก๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ฉ๋๋ก ์ฐ์ ๋๋ค.
Activity์ Intent
- Activity๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ์ ์ธ UI ์์์ ๋๋ค.
- Intent๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์กํฐ๋นํฐ๋ฅผ ์์ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
// MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ๋ค๋ฅธ ์กํฐ๋นํฐ๋ฅผ ์์ํ๊ธฐ ์ํ Intent
val intent = Intent(this, SecondActivity::class.java).apply {
putExtra("message", "Hello, SecondActivity!") // ๋ฐ์ดํฐ ์ ๋ฌ
}
startActivity(intent) // SecondActivity๋ฅผ ์์
}
}
// SecondActivity.kt
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
// ์ ๋ฌ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
val message = intent.getStringExtra("message")
findViewById<TextView>(R.id.textView).text = message // ๋ฉ์์ง ์ถ๋ ฅ
}
}
Service์ Intent
- Service๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํ๋ ์ปดํฌ๋ํธ์ ๋๋ค.
- Intent๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
// MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ์๋น์ค๋ฅผ ์์ํ๊ธฐ ์ํ Intent
val intent = Intent(this, MyService::class.java).apply {
putExtra("inputExtra", "Hello, Service!")
}
startService(intent) // ์๋น์ค ์์
}
}
// MyService.kt
class MyService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val input = intent?.getStringExtra("inputExtra")
// ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ํ (์: ์๋ฆผ ํ์)
val notification = NotificationCompat.Builder(this, "CHANNEL_ID")
.setContentTitle("Service")
.setContentText(input)
.setSmallIcon(R.drawable.ic_service)
.build()
startForeground(1, notification) // ํฌ์ด๊ทธ๋ผ์ด๋ ์๋น์ค๋ก ์์
return START_NOT_STICKY
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
}
BroadcastReceiver์ Intent
- BroadcastReceiver๋ ์์คํ
์ ์ญ์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ์ปดํฌ๋ํธ์
๋๋ค.
- ๋ฐฐํฐ๋ฆฌ ๋ถ์กฑ, ๋คํธ์ํฌ ๋ณ๊ฒฝ๊ณผ ๊ฐ์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ์ด๋ฒคํธ
- Intent๋ฅผ ํตํด์ ๋ธ๋ก๋์บ์คํธ ๋ฉ์์ง๋ฅผ ์ก์ ํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
// MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ๋ธ๋ก๋์บ์คํธ ์ก์
val intent = Intent("com.example.ACTION_SEND").apply {
putExtra("message", "Hello, BroadcastReceiver!")
}
sendBroadcast(intent) // ๋ธ๋ก๋์บ์คํธ ์ก์
}
}
// MyBroadcastReceiver.kt
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// ๋ธ๋ก๋์บ์คํธ์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
val message = intent.getStringExtra("message")
// ๋ธ๋ก๋์บ์คํธ ๋ฉ์์ง ์ฒ๋ฆฌ (์: ํ ์คํธ ๋ฉ์์ง ํ์)
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
}
// AndroidManifest.xml
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.ACTION_SEND" />
</intent-filter>
</receiver>
์ธํ ํธ ์ ํ
- ์ธํ ํธ๋ ๋ช ์์ ์ธํ ํธ์ ์์์ ์ธํ ํธ๋ก ๋๋ฉ๋๋ค.
๋ช ์์ ์ธํ ํธ
- ๋ช ์์ ์ธํ ํธ๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ๋์์ ๋ช ์์ ์ผ๋ก ์ ์ํ๊ฒ ๋ค๋ ๋ป์ ๋๋ค.
val intent = Intent(this@MainActivity, SecondActivity::class.java)
startActivity(intent)
- ์ ์ธํ ํธ์์๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ๋์์ SecondActivity๋ก ์ง์ ํ์๊ธฐ ๋๋ฌธ์ ๋ช ์์ ์ธํ ํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์์์ ์ธํ ํธ
- ์์์ ์ธํ ํธ๋ ๋ช ์์ ์ธํ ํธ์ ๋ฌ๋ฆฌ ์ ๋ฌ ๊ฐ์ฒด์ ๋ํด์ ํน์ ํ ๊ตฌ์ฑ์์๋ฅผ ์ง์ ํ์ง ์์ต๋๋ค.
- ๋์ ํน์ ํ ์์ ์ ์ง์ ํ์ฌ, ์ง์ ํ ์์ ์ ์ํํ ์ ์๋ ๊ตฌ์ฑ์์(๋ค๋ฅธ ์ปดํฌ๋ํธ)์ ์์ฒญํ ์ ์์ต๋๋ค.
- ์ ๊ณผ์ ์์ startActivity๋ฅผ ํตํด์ ์๋๋ก์ด๋ ์์คํ ์ด ์ง์ ํ ์ธํ ํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์กํฐ๋นํฐ๋ฅผ ์ฐพ์์ ์ธํ ํธ๋ฅผ ์ ๋ฌ์์ผ ์กํฐ๋นํฐ๋ฅผ ์คํํฉ๋๋ค.
์์์ ์ธํ ํธ์ ์ธํ ํธ ํํฐ
- ์์์ ์ธํ ํธ๋ ์ธํ ํธ ํํฐ๋ฅผ ํตํด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ต๋๋ค.
- ์ด๋ AndroidManifest.xml์์ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
- <action> : name ํน์ฑ์์ ํ์ฉ๋ ์ธํ ํธ ์์
- <data> : ํ์ฉ๋ ๋ฐ์ดํฐ ์ ํ
- <category> : name ํน์ฑ์์ ํ์ฉ๋ ์ธํ ํธ ์นดํ ๊ณ ๋ฆฌ
<activity android:name="SecondActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
// ์์์ ์ธํ
ํธ์์๋ category.DEFAULT๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค.
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
- System์ด ๋งค๋ํ์คํธ ํ์ผ์ ์ ์๋ ์ธํ ํธ ํํฐ๋ฅผ ํตํด์ ์์ฒญํ ๊ตฌ์ฑ์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋ง์ฝ์ ๊ตฌ์ฑ ์์๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์ด๋ ๊ตฌ์ฑ์์๋ฅผ ์ ํํ ์ง ์ ํ ์กฐ๊ฑด์ ์ ๊ณตํฉ๋๋ค.
Intent ๊ฐ์ฒด
- ์ธํ
ํธ ๊ฐ์ฒด๋ ์๋์ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ์์ ์ด๋ฆ
- ์์
- ๋ฐ์ดํฐ
- ์นดํ ๊ณ ๋ฆฌ
- ์์คํธ๋ผ
- ํ๋๊ทธ
์ฐธ๊ณ
https://velog.io/@akcineg/์๋๋ก์ด๋-์ธํ ํธIntent
https://developer.android.com/guide/components/intents-filters?hl=ko