Android/Android 더하기

Android Shortcut(바로가기)

728x90
반응형

 

shortcut(바로가기)는 앱 아이콘 롱 클릭 시 앱의 특정 작업을 실행하는 바로가도록 해주는 기능입니다.

 

이러한 바로가기는 지원되는 런처나 어시스턴트(Google 어시스턴트 등)에 표시될 수 있으며

사용자가 내에서 특정 작업을 빠르게 시작할 있도록 도와줍니다.

 

각각의 shortcut은 하나 이상의 Intent를 참조하고 

각 Intent는 사용자가 shortcut를 선택할 때 앱에서 특정 작업을 실행합니다.

 

바로가기로 표시할 수 있는 작업의 예

  • 이메일 앱에서 새로운 이메일 작성하기
  • 매핑 앱에서 사용자를 특정 위치로 이동하기
  • 커뮤니케이션 앱에서 친구에게 메시지 전송하기
  • 미디어 앱에서 TV 프로그램의 다음 에피소드 재생하기
  • 게임 앱에서 마지막 저장 지점 로드하기
  • 음성 명령을 사용하여 음성으로 배달 앱에 음료 주문하기

 

 

 

 

Intent를 통해 앱 외부(다른 앱, shortcut 등)에서 데이터 받기

https://developer.android.com/training/sharing/receive?hl=ko


Shotcut 유형

바로가기로 콘텐츠를 전달하는 방법은 사용 사례와 바로가기의 컨텍스트가 앱 주도인지 사용자 주도인지에 따라 달라집니다.

 

정적 바로가기의 컨텍스트는 변경되지 않고 동적 바로가기의 컨텍스트는 계속 변경되지만 두 경우 모두 컨텍스트는 앱에서 주도합니다.

고정된 바로가기를 사용하는 것과 같이 사용자가 앱이 콘텐츠를 전달하는 방식을 선택하는 경우 컨텍스트는 사용자가 정의합니다.

 

정리하자면, 앱 바로가기 유형은 앱의 주요 사용 사례(기능)와 컨텍스트 변경 및 컨텍스트 주도 주체 따라 3가지로 나뉠수 있습니다. 

 

 

1. 정적 바로가기

APK 또는 App Bundle로 패키징된 리소스 파일에 정의

사용자가 앱과 상호작용하는 전체 기간에 걸쳐 일관된 구조를 사용하여 콘텐츠에 연결하는 앱에 가장 좋습니다. 런처가 대부분 한 번에 4개의 바로가기만 표시할 수 있으므로 정적 바로가기가 일반적인 활동에 유용합니다.

 

예를 들어 사용자가 캘린더나 이메일을 특정 방식으로 보려는 경우 정적 바로가기를 사용하면 루틴 작업을 실행하는 환경이 일관성 있게 됩니다. 

그밖에 보낸 메시지 보기, 알람 설정, 그날의 사용자 운동 활동 표시하기 등이 있습니다. 

 

 

2. Dynamic Shortcuts (동적 바로가기)

런타임 시에만 앱에서 푸시, 업데이트, 삭제할 수 있음

컨텍스트에 민감한 앱의 작업에 사용됩니다. 컨텍스트 인식 바로가기는 사용자가 앱에서 하는 작업에 따라 맞춤설정됩니다.

 

예를 들어, 사용자가 게임을 시작할 때 현재 레벨부터 시작할 수 있는 게임을 빌드한다면 바로가기를 자주 업데이트해야 합니다. 동적 바로가기를 사용하면 사용자가 레벨을 통과할 때마다 바로가기가 업데이트될 수 있습니다. 

그밖에 특정 사람에게 전화 걸기, 특정 위치로 이동, 사용자의 마지막 저장 지점에서 게임 로드하기 등이 있습니다. 

 

 

 

 

3. 고정된 바로가기

: 사용자가 권한을 부여하면 런타임 지원되는 런처에 추가할 있음

(사용자가 정적/동적 바로가기를 런처에 복사하여 고정된바로가기를 직접 만들 수 있음)

사용자가 주도하는 특정 작업에 사용됩니다. 

예를 들어 사용자가 특정 웹사이트를 런처에 고정하려고 할 수 있습니다. 이렇게 하면 브라우저의 기본 인스턴스를 사용하는 것보다 빠르게 한 단계로 웹사이트에 이동하는 등 사용자가 맞춤 작업을 실행할 수 있으므로 유용합니다.

 

 


각 유형별 shotcut만들기

1. 정적 바로가기 만들기

1) 매니페스트 파일(AndroidManifest.xml)의 인텐트필터가 android.intent.action.MAIN android.intent.category.LAUNCHER

카테고리로 설정된 Activity 에 다음 <meta-data> 요소를 추가한다. 

<meta-data android:name="android.app.shortcuts"
    android:resource="@xml/shortcuts" />

2) res/xml/shortcuts.xml 파일 만들기

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="move"
        android:enabled="true"
        android:icon="@drawable/icon_ca"
        android:shortcutShortLabel="@string/request_move_cert"
        android:shortcutLongLabel="@string/request_move_cert"
        android:shortcutDisabledMessage="@string/request_move_cert">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.crosscert.android"
            android:targetClass="com.crosscert.android.view.CertMenuActivity" />
    </shortcut>
    <shortcut
        android:shortcutId="issue"
        android:enabled="true"
        android:icon="@drawable/icon_ca"
        android:shortcutShortLabel="@string/request_issue_cert"
        android:shortcutLongLabel="@string/request_issue_cert"
        android:shortcutDisabledMessage="@string/request_issue_cert">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.crosscert.android"
            android:targetClass="com.crosscert.android.issue.CertIssueActivity"/>
    </shortcut>
    <shortcut
        android:shortcutId="manage"
        android:enabled="true"
        android:icon="@drawable/icon_ca"
        android:shortcutShortLabel="@string/menu_title_cert_manage"
        android:shortcutLongLabel="@string/menu_title_cert_manage"
        android:shortcutDisabledMessage="@string/menu_title_cert_manage">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.crosscert.android"
            android:targetClass="com.crosscert.android.view.CertManageActivity" />
    </shortcut>
</shortcuts>

2-1) 속성 값 맞춤 설정

 

  • android:shortcutId="move"
    • 문자열 리터럴입니다. ShortcutManager 객체가 바로가기에 작업을 실행할 때의 바로가기를 나타냅니다.
  • android:enabled= true"
  • android:icon="@drawable/icon_ca"
  • android:shortcutShortLabel="@string/request_move_cert"
  • android:shortcutLongLabel="@string/request_move_cert"
  • android:shortcutDisabledMessage="@string/request_move_cert"

2-2) Intent 내부 요소 구성

 

 

더 알아보기 - 인텐트와 인텐트 필터

2. 동적 바로가기 만들기

1) Google 바로가기 통합 라이브러리 추가

 

3. 고정된 바로가기 만들기

 

1) 맞춤 바로가기 Activity 만들기


Shortcut 사용 최적화 관리

 

1. 바로가기 표시 순서

런처가 앱의 바로가기를 표시할 때는 다음 순서로 표시되어야 합니다.

  1. 정적 바로가기: isDeclaredInManifest() 메서드가 true를 반환합니다.
  2. 동적 바로가기: ShortcutInfo.isDynamic() 메서드가 true를 반환합니다.

각 바로가기 유형(정적 및 동적) 내에서 바로가기는 ShortcutInfo.getRank()에 따라 증가하는 순위순으로 정렬됩니다. Google 어시스턴트는 사용자에게 표시할 컨텍스트 바로가기를 결정할 때 바로가기 순위도 고려합니다.

 

2. 여러 Intnet 및 Activity 관리

 

사용자가 바로가기를 활성화할 때 앱에서여러 작업을 실행하기위해서는 다음 3가지 방법이 있다.

1) 여러 인텐트를 할당하거나 2) 특정 활동을 다른 활동에서 시작하거나 3) 인텐트 플래그를 설정 하면 된다.

 

1) 여러 Intent 할당

ShortcutInfoCompat.Builder로 바로가기를 만들 때 setIntent() 대신 setIntents()를 사용할 수 있습니다. 

setIntents()를 호출하면 사용자가 바로가기를 선택할 때 앱 내에서 여러 활동을 실행하여 마지막 활동을 제외한 모든 활동을 백 스택의 목록에 배치할 수 있습니다. 그런 다음 사용자가 기기의 뒤로 버튼을 누르려고 하면 기기의 런처로 돌아가는 대신 앱의 다른 활동이 사용자에게 표시됩니다.

 

2) Activity 에서 다른 Activity 시작

정적 바로가기는 맞춤 인텐트 플래그를 보유할 수 없습니다. 정적 바로가기의 첫 번째 인텐트에는 상 Intent.FLAG_ACTIVITY_NEW_TASK Intent.FLAG_ACTIVITY_CLEAR_TASK가 설정됩니다. 즉, 앱이 이미 실행 중이면 정적 바로가기가 실행될 때 앱의 기존 활동이 모두 제거됩니다. 이 동작을 원하지 않는 경우 트램펄린 활동 또는 표시되지 않는 활동( Activity.onCreate(Bundle)에서 다른 활동을 시작하는 활동)을 사용하여 Activity.finish()를 호출할 수 있습니다.

  1. AndroidManifest.xml 파일의 트램펄린 활동에는 속성 할당 android:taskAffinity=""가 포함되어야 합니다.
  2. 바로가기 리소스 파일에서 정적 바로가기 내의 인텐트는 트램펄린 활동을 참조해야 합니다.

트램펄린 활동에 관한 자세한 내용은 다른 활동에서 활동 시작하기를 참조하세요.

 

3)  Intent FLAG 설정

동적 바로가기는 어떤 설정의 Intent 플래그로도 게시될 수 있습니다. 다른 플래그와 함께 Intent.FLAG_ACTIVITY_CLEAR_TASK를 지정하는 것이 좋습니다. 그렇게 하지 않고 앱이 실행되는 동안 다른 작업을 시작하려고 하면 타겟 활동이 표시되지 않을 수 있습니다.

작업 및 인텐트 플래그에 관한 자세한 내용은 작업 및 백 스택 가이드를 참조하세요.

 

3. 바로가기 사용 추적

런처는 바로가기의 활성화 내역을 검사하여 정적 및 동적 바로가기를 표시할 상황을 알아냅니다. 정적 바로가기의 경우 다음 이벤트 중 하나가 발생할 때 reportShortcutUsed() 메서드를 호출하고 바로가기 ID를 전달하여 사용자가 앱 내에서 특정 작업을 언제 완료하는지 계속 추적할 수 있습니다.

  • 사용자가 주어진 ID로 바로가기를 선택합니다.
  • 앱 내에서 사용자는 동일한 바로가기에 상응하는 작업을 수동으로 완료합니다.

앱은 관련 이벤트가 발생할  pushDynamicShortcut() 메서드를 호출하고 바로가기 ID 전달하여 동적 바로가기 사용을 추적합니다. 방법으로 동적 바로가기 사용을 푸시하면 Google 어시스턴트와 같은 어시스턴트 앱에서 사용자에게 관련 바로가기를 추천할 있습니다pushDynamicShortcut() 메서드는 호출되었을 사용량을 보고하므로 동일한 바로가기의 reportShortcutUsed() 메서드도 호출하면 됩니다.

 

4. 바로가기 사용 중지

앱과 그 사용자는 바로가기를 기기의 런처에 고정할 수 있으므로, 이렇게 고정된 바로가기가 오래되거나 더 이상 존재하지 않는 앱 내의 작업으로 사용자를 안내할 수도 있습니다. 이 상황을 관리하려면 사용자가 선택하지 않았으면 하는 바로가기에 대해 disableShortcuts()를 호출하여 바로가기를 사용 중지하면 됩니다.

 

 


참고

 

안드로이드 개발자 문서가이드

https://developer.android.com/guide/topics/ui/shortcuts?hl=ko 

예제 앱

https://github.com/android/user-interface-samples/tree/main/AppShortcuts/

예제 코드

https://www.programcreek.com/java-api-examples/?api=androidx.core.content.pm.ShortcutInfoCompat 

728x90
반응형