profile image

L o a d i n g . . .

반응형

안드로이드 코틀린 숏컷 구현하기

Android Kotlin Shortcut

 

안드로이드에서 아이콘을 누르고 있으면 기기마다 다르지만 삭제, 정보보기 등 기능을 확인할 수 있는데 SDK25이상부터 커스텀이 가능하다

그런데 솔직히 말해 이 기능을 많이 사용하는지는 의문이고, 실제로 이 기능을 모르는 사람도 많다.

어찌되었든 커스텀이 가능하다.

 

커스텀을 하기 위해서는 안드로이드에서 제공해주는 ShortcutManager를 사용하면 된다.

const val shortcut_website_id = "id_website"

@RequiresApi(Build.VERSION_CODES.N_MR1)
object Shortcuts {

    fun setUp(context : Context) {
        val shortcutManager = getSystemService(context, ShortcutManager::class.java)

        val shortcutWebsite = ShortcutInfo.Builder(context, shortcut_website_id)
            .setShortLabel("Website")
            .setLongLabel("Open the website!")
            .setIcon(Icon.createWithResource(context, R.drawable.ic_baseline_public_24))
            .setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https:www.youtube.com")))
            .build()

        shortcutManager!!.dynamicShortcuts = listOf(shortcutWebsite)
    }
}

싱글턴 클래스에서 ShortcutManager를 사용하여 만들었다.

숏컷 기능은 SDK25이상에서만 작동하기 때문에 @RequiresApi(Build.VERSION_CODES.N_MR1) 어노테이션을 사용하였다.

사용안하면 어차피 warning 혹은 error이 뜨기때문에 넣어야 한다.

숏컷에 들어가는 아이템은 위와같이 간단하게 구현이 가능하며, intent를 이용하여 이벤트 혹은 화면전환을 하도록 한다.

setShortLabel은 바로가기 아이콘을 만들었을 때 들어가는 아이콘 이름이며,

setLongLabel은 숏컷의 아이콘의 이름이다.

setIcon에는 원하는 이미지를 넣어서 아이콘을 만들도록 한다.

 

마지막에는 dynamicShortcuts에 List타입으로 위에서 정의한 shortcutWebsite를 넣도록 한다.

 

if (Build.VERSION.SDK_INT >= 25) {
            Shortcuts.setUp(applicationContext)
}

마지막 MainActivity에서는 조건문으로 SDK버전을 체크해주고, 위에서 만든 Shortcuts의 setUp 함수를 실행시켜주면 된다.

 

제대로 코딩이 되면 위 이미지와 같이 아이콘을 꾹 누르고 있으면 숏컷메뉴들이 나타나게 된다.

위 예시 코드에는 한개만 들어있지만 개인적으로 한개 더 추가해서 현재 2개로 보이고 있다.

숏컷메뉴 오른쪽의 두줄 햄버거버튼을 누르면 바로가기 아이콘을 만들 수 있다.

 

숏컷을 만들때 정의해둔 Label대로 나타나는 것을 확인할 수 있다.

 

일단 제공은 해주어서 공부하는 마음으로 만들어 보았지만, 과연 이 기능을 사용자들이 많이 알고 있을지 알고 있더라도 많이 사용할지는 의문이다. ios에는 롱키액션인가? 라는 이름으로 같은 기능을 제공해주는 걸로 알고 있는데, 아이폰을 사용하고 있지만 한번도 사용해본 적 없는 기능이다.

 

숏컷을 구현할 때 하나 신경써야 할 점은 SDK버전이지 않을까 싶다. 25이상부터 제공되는 기능으로, 숏컷을 제대로 구현을 해놓고 SDK버전 체크를 하지 않으면 크레쉬가 나지 않을까 싶다가도 확인을 안해보아서 잘 모르겠다.

그래도 혹시 모르니 체크하는 것이 좋지않을까 싶다.

반응형
복사했습니다!