๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/Android Developer AtoZ

[Android] App Architecture - App Shortcuts (์•ฑ ๋ฐ”๋กœ๊ฐ€๊ธฐ)

by ๊ธฐ๋ฌด์ • 2025. 10. 1.
728x90

 

 

 

์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์•ฑ์—์„œ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธํ…ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, ๊ฐ ์ธํ…ํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์„ ํƒํ•  ๋•Œ ์•ฑ์—์„œ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์•ฑ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Shortcut Type ์„ค๋ช…
Static Shortcuts ์•ฑ์ด ์„ค์น˜๋  ๋•Œ ๋ฏธ๋ฆฌ ์ •์˜๋œ, ๊ณ ์ •๋œ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dynamuc Shortcuts ์•ฑ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ์ถ”๊ฐ€/์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ
Pinned Shortcuts ์‚ฌ์šฉ์ž๊ฐ€ ํ™ˆ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

์ด๋•Œ ์ •์  ๋ฐ”๋กœ๊ฐ€๊ธฐ์™€ ๋™์  ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 4๊ฐœ์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ณ ์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ์˜ ์ˆ˜๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ฑ์€ ๊ณ ์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์ง€๋งŒ ์‚ฌ์šฉ ์ค‘์ง€ํ•  ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

Static Shortcuts(์ •์  ๋ฐ”๋กœ๊ฐ€๊ธฐ)

์ •์  ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ์•ฑ์ด ์„ค์น˜๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์กด์žฌํ•˜๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ์ž…๋‹ˆ๋‹ค. APK ๋˜๋Š” App Bundle๋กœ ํŒจํ‚ค์ง•๋œ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.

์•ฑ์˜ AndroidManifest.xml ํŒŒ์ผ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์—ฐ๊ฒฐ๋œ shortcuts ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด, ์•ˆ๋“œ๋กœ์ด๋“œ ๋Ÿฐ์ฒ˜๊ฐ€ ์•ฑ์„ ์„ค์น˜ํ•  ๋•Œ ์ด๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์•ฑ ์•„์ด์ฝ˜์„ ๊ธธ๊ฒŒ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฉ”๋‰ด๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

์ฆ‰, ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ , ์‹คํ–‰ ์ค‘์— ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ง€์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

<!-- res/xml/shortcuts.xml-->
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="open_profile"
        android:enabled="true"
        android:icon="@drawable/ic_profile"
        android:shortcutShortLabel="@string/shortcut_label"
        android:shortcutLongLabel="@string/shortcut_label_long"
        android:shortcutDisabledMessage="@string/shortcut_disabled_message">
        <intent
            android:action="android.intent.action.MAIN"
            android:targetPackage="com.example.app"
            android:targetClass="com.example.app.ProfileActivity" />
    </shortcut>
</shortcuts>

 

android:enabled์˜ ๊ฐ’์„ true๋กœ ์„ค์ •ํ•ด์•ผ ๋ฐ”๋กœ๊ฐ€๊ธฐ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„ํ™œ์„ฑํ™”๋œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด android:shortcutDisabledMessage๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<!-- AndroidManifest.xml -->
<application ...>
    <activity ...>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
            android:name="android.app.shortcut"
            android:resources="@xml/shortcuts" />
    </activity>
</application>

 

์ด๋•Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” application ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ, intent-filter๊ฐ€ ์žˆ๋Š” Main Activity์— ์ž‘์„ฑํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

์‹คํ–‰ ๊ฒฐ๊ณผ

 

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋˜ใ…๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ •๋œ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ œ๊ณต๋˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋„ฃ๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ์€ํ–‰ ์•ฑ์˜ ๊ฒฝ์šฐ, "์†ก๊ธˆํ•˜๊ธฐ"๋‚˜ "๊ณ„์ขŒ์กฐํšŒ"์™€ ๊ฐ™์€ ๊ณ ์ • ๊ธฐ๋Šฅ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜๋ฉด ๋‹จ์ ์€ ๋™์ ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋‚˜ ๊ฐœ์ธํ™”๋œ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ ธ์•ผ ํ•˜๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ์ด ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

Dynamic Shortcuts(๋™์  ๋ฐ”๋กœ๊ฐ€๊ธฐ)

๋™์  ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ์ž…๋‹ˆ๋‹ค.

์•ฑ์—์„œ ShortManager API๋ฅผ ์ด์šฉํ•ด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ƒˆ ๋‹จ์ถ•ํ‚ค๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ณ , ์•ฑ ์ƒํƒœ๋‚˜ ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

val intent = Intent(this, ProfileActivity::class.java).apply {
    action = Intent.ACTION_VIEW
}

val shortcut = ShortcutInfoCompat.Builder(this, "dynamic_profile")
    .setShortLabel("ํ”„๋กœํ•„2")
    .setIcon(Icon.createWithResource(this, R.drawable.ic_profile))
    .setIntent(intent)
    .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

 

pushDynamicShortcut() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ID์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋™์ผํ•œ ID๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ์šด ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

 


์ถ”๊ฐ€ํ•œ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// id๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ ์‚ญ์ œ
ShortcutManagerCompat.removeDynamicShortcuts(context, "dynamic_profile")

// ๋ชจ๋“  ๋ฐ”๋กœ๊ฐ€๊ธฐ ์‚ญ์ œ
ShortcutManagerCompat.removeAllDynamicShortcuts(context)

 

 

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ์œ ์—ฐํ•จ์œผ๋กœ, ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ๋งž์ถฐ ๊ฐœ์ธํ™”๋œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์บ์‹œ๊ฐ€ ์ง€์›Œ์ง€๋ฉด ๋“ฑ๋ก๋œ ๋™์  ๋ฐ”๋กœ๊ฐ€๊ธฐ๊ฐ€ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์•ฑ ์‹คํ–‰ ์ค‘์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋Š” ์ ์ด ๋‹จ์ ์ž…๋‹ˆ๋‹ค.

 

 

 

Pinned Shortcuts(๊ณ ์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ)

๊ณ ์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ํ™ˆ ํ™”๋ฉด์— ๋…๋ฆฝ์ ์ธ ์•„์ด์ฝ˜์ฒ˜๋Ÿผ ์ถ”๊ฐ€๋˜๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์‹œ ์ง€์›๋˜๋Š” ๋Ÿฐ์ฒ˜์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ ๋‚ด๋ถ€์—์„œ ShortcutManager์˜ requestPinShortcut() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™ˆ ํ™”๋ฉด์— ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํŒ์—…์„ ๋„์›Œ์ฃผ๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋™์˜ํ•˜๋ฉด ํ•ด๋‹น ์•„์ด์ฝ˜์ด ํ™ˆ ํ™”๋ฉด์— ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.

val shortcutManager = getSystemService(ShortcutManager::class.java)

if (shortcutManager.isRequestPinShortcutSupported) {
    val intent = Intent(this, ProfileActivity::class.java).apply {
        action = Intent.ACTION_VIEW
    }

    val shortcut = ShortcutInfo.Builder(this, "pinned_profile")
        .setShortLabel("ํ”„๋กœํ•„3")
        .setIcon(Icon.createWithResource(this, R.drawable.ic_profile))
        .setIntent(intent)
        .build()

    val pinIntent = shortcutManager.createShortcutResultIntent(shortcut)
    val callbackIntent = PendingIntent.getBroadcast(this, 0, pinIntent, PendingIntent.PLAG_IMMUTABLE)

    shortcutManager.requestPinShortcut(shortcut, callbackIntent.intentSender)
}

 

๋ฐ”๋กœ๊ฐ€๊ธฐ ์ถ”๊ฐ€ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ํŒ์—…
๋ฐ”๋กœ๊ฐ€๊ธฐ ์ถ”๊ฐ€ ํ—ˆ์šฉ ๊ฒฐ๊ณผ

 

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ํ™ˆ ํ™”๋ฉด ์ ‘๊ทผ์„ฑ์ด ๊ทน๋Œ€ํ™”๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ์ด์šฉํ•˜๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์•„์ด์ฝ˜์ฒ˜๋Ÿผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

Built-in Intents(๋‚ด์žฅ ์ธํ…ํŠธ)

์ด๋•Œ ๋ฐ”๋กœ๊ฐ€๊ธฐ์— Capability ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Google ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋‚ด์žฅ ์ธํ…ํŠธ(Built-in Intents)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๊ธธ๊ฒŒ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋Ÿฐ์ฒ˜์—์„œ shortcut๋ฅผ ์ง์ ‘ ๋ˆŒ๋Ÿฌ intent๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์Œ์„ฑ ๋ช…๋ น๊ณผ ๊ฐ™์ด ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ BII๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น shortcut๊ณผ ์—ฐ๊ฒฐ๋œ Intent๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

 

์•„๋ž˜์˜ ์˜ˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Œ์„ฑ ๋ช…๋ น์œผ๋กœ ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํ”ผํŠธ๋‹ˆ์Šค ์•ฑ์—์„œ ์šด๋™์„ ์‹œ์ž‘ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <capability android:name="actions.intent.START_EXERCISE">
    <intent
        android:action="android.intent.action.VIEW"
        android:targetPackage="com.example.sampleApp"
        android:targetClass="com.example.sampleApp.ExerciseActivity">
        <parameter
            android:name="exercise.name"
            android:key="exerciseType"/>
        </intent>
    </capability>
</shortcuts>

 

<capability>์˜ name ์†์„ฑ์€ ์ง€์›ํ•  ์ž‘์—… ์Œ์„ฑ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ BII Action ID๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ "Hey Google, ์šด๋™์„ ์‹œ์ž‘ํ•ด์ค˜." ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ด ์•ฑ์— ๋งคํ•‘ํ•˜๋ ค๊ณ  ํ•  ๋•Œ START_EXERCISE BII๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

<parameter>์—๋Š” ๊ธฐ๋Šฅ๊ณผ ์—ฐ๊ฒฐ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ "์•ฑ์—์„œ ๋‹ฌ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ด์ค˜." ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ '๋‹ฌ๋ฆฌ๊ธฐ'๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ’์„ parameter ์š”์†Œ์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

๋™์  ๋ฐ”๋กœ๊ฐ€๊ธฐ๋‚˜ ๊ณ ์ • ๋ฐ”๋กœ๊ฐ€๊ธฐ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด capability๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

val shortcut = ShortcutInfoCompat.Builder(context, "shortcut_id")
    .setShortLabel("๋‹ฌ๋ฆฌ๊ธฐ ์‹œ์ž‘")
    .setIcon(IconCompat.createWithResource(context, R.drawable.ic_run))
    .setIntent(intent)
    .addCapabilityBinding(
        "actions.intent.START_EXERCISE",
        "exercise.name",
        listOf("running")
    )
    .build()

 

 

์—ฌ๋Ÿฌ ๋ช…๋ น์–ด์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ด€ํ•œ ์ •๋ณด๋Š” App Actions built-in intents์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 

์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋กœ๋“œ๋งต์„ ๋”ฐ๋ผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

 

 

728x90