Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

바로가기 만들기

바로가기는 사용자가 앱의 각 부분에 빠르게 액세스하도록 하여 특정 유형의 콘텐츠를 사용자에게 전달합니다.

바로가기로 콘텐츠를 전달하는 방법은 사용 사례와 바로가기의 컨텍스트가 앱 주도인지 사용자 주도인지에 따라 달라집니다. 정적 바로가기의 컨텍스트는 변경되지 않고 동적 바로가기의 컨텍스트는 계속 변경되지만 두 경우 모두 컨텍스트는 앱에서 주도합니다. 고정된 바로가기를 사용하는 것과 같이 사용자가 앱이 콘텐츠를 전달하는 방식을 선택하는 경우 컨텍스트는 사용자가 정의합니다. 다음 시나리오는 각 바로가기 유형의 사용 사례를 보여줍니다.

  • 정적 바로가기는 사용자가 앱과 상호작용하는 전체 기간에 걸쳐 일관된 구조를 사용하여 콘텐츠에 연결하는 앱에 가장 좋습니다. 런처가 대부분 한 번에 4개의 바로가기만 표시할 수 있으므로 정적 바로가기가 일반적인 활동에 유용합니다. 예를 들어 사용자가 캘린더나 이메일을 특정 방식으로 보려는 경우 정적 바로가기를 사용하면 루틴 작업을 실행하는 환경이 일관성 있게 됩니다.
  • 동적 바로가기는 컨텍스트에 민감한 앱의 작업에 사용됩니다. 예를 들어 실행 시 사용자가 현재 레벨에서 시작할 수 있는 게임을 빌드한다면 바로가기를 자주 업데이트해야 합니다. 동적 바로가기를 사용하면 사용자가 레벨을 통과할 때마다 바로가기가 업데이트될 수 있습니다.
  • 고정된 바로가기는 사용자가 주도하는 특정 작업에 사용됩니다. 예를 들어 사용자가 특정 웹사이트를 런처에 고정하려고 할 수 있습니다. 이렇게 하면 브라우저의 기본 인스턴스를 사용하는 것보다 빠르게 한 단계로 웹사이트에 이동하는 등 사용자가 맞춤 작업을 실행할 수 있으므로 유용합니다.

정적 바로가기 만들기

정적 바로가기는 앱 내 일반 작업의 링크를 제공하며, 이 작업은 앱의 현재 버전이 제공되는 기간 동안 일관성을 유지해야 합니다. 정적 바로가기에 알맞은 후보에는 보낸 메시지 보기, 알람 설정, 그날의 사용자 운동 활동 표시가 포함됩니다.

정적 바로가기를 만들려면 다음 단계를 완료하세요.

  1. 앱의 매니페스트 파일(AndroidManifest.xml)에서 인텐트 필터가 android.intent.action.MAIN 작업과 android.intent.category.LAUNCHER 카테고리로 설정된 활동을 찾습니다.

  2. 앱의 바로가기가 정의된 리소스 파일을 참조하는 이 활동에 <meta-data> 요소를 추가합니다.

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.myapplication">
      <application ... >
        <activity android:name="Main">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
          
          <meta-data android:name="android.app.shortcuts"
                     android:resource="@xml/shortcuts" /> 
        </activity>
      </application>
    </manifest>
    
  3. 새로운 리소스 파일 res/xml/shortcuts.xml을 만듭니다.

  4. 새로운 리소스 파일에서 <shortcut> 요소 목록이 포함된 <shortcuts> 루트 요소를 추가합니다. 각 <shortcut> 요소에는 아이콘, 설명 라벨, 앱 내에서 실행하는 인텐트 등 정적 바로가기에 관한 정보가 포함됩니다.

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
      <shortcut
        android:shortcutId="compose"
        android:enabled="true"
        android:icon="@drawable/compose_icon"
        android:shortcutShortLabel="@string/compose_shortcut_short_label1"
        android:shortcutLongLabel="@string/compose_shortcut_long_label1"
        android:shortcutDisabledMessage="@string/compose_disabled_message1">
        <intent
          android:action="android.intent.action.VIEW"
          android:targetPackage="com.example.myapplication"
          android:targetClass="com.example.myapplication.ComposeActivity" />
        <!-- If your shortcut is associated with multiple intents, include them
             here. The last intent in the list determines what the user sees when
             they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
      </shortcut>
      <!-- Specify more shortcuts here. -->
    </shortcuts>
    

속성 값 맞춤설정

다음 목록에는 정적 바로가기 내의 여러 속성에 관한 설명이 포함되어 있습니다. android:shortcutIdandroid:shortcutShortLabel 값을 제공해야 합니다. 그외 모든 값은 선택사항입니다.

android:shortcutId

문자열 리터럴입니다. ShortcutManager 객체가 바로가기에 작업을 실행할 때의 바로가기를 나타냅니다.

참고: 이 속성 값을 @string/foo와 같은 리소스 문자열로 설정할 수 없습니다.

android:shortcutShortLabel

바로가기의 목적을 설명하는 간결한 구문입니다. 가능하면 바로가기의 '짧은 설명' 길이를 10자로 제한합니다.

자세한 내용은 setShortLabel()를 참조하세요.

참고: 이 속성 값은 @string/shortcut_short_label와 같은 리소스 문자열이어야 합니다.

android:shortcutLongLabel

바로가기의 목적을 설명하는 확장된 구문입니다. 공간이 충분하다면 런처가 android:shortcutShortLabel 대신 이 값을 표시합니다. 가능하면 바로가기의 '긴 설명' 길이를 25자로 제한합니다.

자세한 내용은 setLongLabel()를 참조하세요.

참고: 이 속성 값은 @string/shortcut_long_label와 같은 리소스 문자열이어야 합니다.

android:shortcutDisabledMessage

사용자가 사용 중지된 바로가기를 실행하려고 할 때 지원되는 런처에 표시되는 메시지입니다. 메시지는 사용자에게 바로가기가 현재 사용 중지된 이유를 설명해야 합니다. 이 속성 값은 android:enabledtrue인 경우 아무런 영향을 미치지 않습니다.

참고: 이 속성 값은 @string/shortcut_disabled_message와 같은 리소스 문자열이어야 합니다.

android:enabled

사용자가 지원되는 런처에서 바로가기와 상호작용할 수 있는지 확인합니다. android:enabled의 기본값은 true입니다. 기본값을 false로 설정하면 바로가기를 사용 중지한 이유를 설명하는 android:shortcutDisabledMessage도 설정해야 합니다. 이러한 메시지를 제공할 필요가 없다고 생각되면 XML 파일에서 바로가기를 완전히 삭제하는 것이 가장 쉬운 방법입니다.

android:icon

런처가 사용자에게 바로가기를 표시할 때 사용하는 비트맵 또는 적응형 아이콘입니다. 이 값은 이미지 경로 또는 이미지가 포함된 리소스 파일일 수 있습니다. 가능하면 적응형 아이콘을 사용하여 성능과 일관성을 개선하세요.

참고: 바로가기 아이콘에는 색조가 포함될 수 없습니다.

내부 요소 구성

앱의 정적 바로가기를 나열하는 XML 파일은 각 <shortcut> 요소 내부의 다음 요소를 지원합니다. 정의하는 각 정적 바로가기의 intent 내부 요소를 포함해야 합니다.

intent

사용자가 바로가기를 선택할 때 시스템에서 실행하는 작업입니다. 이 인텐트는 android:action 속성 값을 제공해야 합니다.

참고: intent 요소에는 문자열 리소스가 포함될 수 없습니다.

단일 바로가기에 여러 인텐트를 제공할 수 있습니다. 자세한 내용은 여러 인텐트 및 활동 관리, 인텐트 설정, TaskStackBuilder 클래스 참조를 읽어보세요.

categories

새로운 채팅 메시지 만들기와 같은 앱의 바로가기에서 실행하는 작업 유형의 그룹화를 제공합니다.

지원되는 바로가기 카테고리의 목록은 ShortcutInfo 클래스 참조를 읽어보세요.

동적 바로가기 만들기

동적 바로가기는 앱 내에서 컨텍스트에 민감한 특정 작업의 링크를 제공합니다. 이러한 작업은 앱을 사용하는 사이에 그리고 앱이 실행되는 동안에도 변경될 수 있습니다. 동적 바로가기에 알맞은 후보에는 특정 사람에게 전화 걸기, 특정 위치로 이동, 사용자의 마지막 저장 지점에서 게임 로드하기가 포함됩니다.

ShortcutManager API를 사용하면 동적 바로가기에서 다음 작업을 완료할 수 있습니다.

바로가기에서 작업을 실행하는 방법에 관한 자세한 내용은 바로가기 관리 ShortcutManager 참조를 읽어보세요.

동적 바로가기를 만들어 앱에 연결하는 예는 다음 코드 스니펫에서 보여줍니다.

참고: ShortcutManager 클래스의 인스턴스는 인수 ShortcutManager.class와 함께 Context.getSystemService(Class) 또는 인수 Context.SHORTCUT_SERVICE와 함께 Context.getSystemService(String)를 사용하여 가져와야 합니다.

Kotlin

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

val shortcut = ShortcutInfo.Builder(context, "id1")
        .setShortLabel("Website")
        .setLongLabel("Open the website")
        .setIcon(Icon.createWithResource(context, R.drawable.icon_website))
        .setIntent(Intent(Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")))
        .build()

shortcutManager!!.dynamicShortcuts = Arrays.asList(shortcut)

자바

ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

ShortcutInfo shortcut = new ShortcutInfo.Builder(context, "id1")
    .setShortLabel("Website")
    .setLongLabel("Open the website")
    .setIcon(Icon.createWithResource(context, R.drawable.icon_website))
    .setIntent(new Intent(Intent.ACTION_VIEW,
                   Uri.parse("https://www.mysite.example.com/")))
    .build();

shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));

고정된 바로가기 만들기

Android 8.0(API 수준 26) 이상에서 고정된 바로가기를 만들 수 있습니다. 정적 및 동적 바로가기와 달리 고정된 바로가기는 지원되는 런처에 별도의 아이콘으로 표시됩니다. 그림 1은 두 바로가기의 차이를 보여줍니다.

참고: 지원되는 런처에 바로가기를 고정하려고 하면 사용자에게 바로가기 고정 권한을 요청하는 확인 대화상자가 표시됩니다. 사용자가 바로가기가 고정되는 것을 허용하지 않으면 런처는 요청을 취소합니다.

앱 바로가기와 고정된 바로가기의 차이를 보여주는 스크린샷
그림 1. 앱 바로가기와 고정된 바로가기의 모양

앱을 사용하여 지원되는 런처에 바로가기를 고정하려면 다음 단계를 완료하세요.

  1. isRequestPinShortcutSupported()를 사용하여 기기의 기본 런처에서 인앱 바로가기 고정을 지원하는지 확인합니다.
  2. 바로가기가 이미 존재하는지에 따라 다음 두 가지 방법 중 하나로 ShortcutInfo 객체를 만듭니다.

    1. 바로가기가 이미 있는 경우 기존 바로가기의 ID만 포함된 ShortcutInfo 객체를 만듭니다. 시스템에서 바로가기와 관련된 기타 모든 정보를 자동으로 찾아서 고정합니다.
    2. 새로운 바로가기를 고정하는 경우 새로운 바로가기의 ID, 인텐트 및 짧은 라벨이 포함된 ShortcutInfo 객체를 만듭니다.

    참고: 시스템은 고정된 바로가기에서 백업 및 복원을 자동으로 실행하므로 이러한 바로가기의 ID에는 다른 기기에서 이해하지 못할 수 있는 로컬에서 생성된 식별자보다는 안정적인 상수 문자열이나 서버 측 식별자가 포함되어야 합니다.

  3. requestPinShortcut()을 호출하여 바로가기를 기기의 런처에 고정해 봅니다. 이 프로세스 중에 바로가기가 성공적으로 고정된 경우에만 앱에 알리는 PendingIntent 객체를 전달할 수 있습니다.

    참고: 사용자가 바로가기를 런처에 고정하도록 허용하지 않으면 앱에서 콜백을 수신하지 않습니다.

    바로가기가 고정되고 나면 앱에서 updateShortcuts() 메서드를 사용하여 바로가기의 콘텐츠를 업데이트할 수 있습니다. 자세한 내용은 바로가기 업데이트를 참조하세요.

다음 코드 스니펫은 고정된 바로가기를 만드는 방법을 보여줍니다.

참고: ShortcutManager 클래스의 인스턴스는 인수 ShortcutManager.class와 함께 Context.getSystemService(Class) 또는 인수 Context.SHORTCUT_SERVICE와 함께 Context.getSystemService(String)를 사용하여 가져와야 합니다.

Kotlin

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

if (shortcutManager!!.isRequestPinShortcutSupported) {
    // Assumes there's already a shortcut with the ID "my-shortcut".
    // The shortcut must be enabled.
    val pinShortcutInfo = ShortcutInfo.Builder(context, "my-shortcut").build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user allowed the shortcut to be pinned. Note that, if the
    // pinning operation fails, your app isn't notified. We assume here that the
    // app has implemented a method called createShortcutResultIntent() that
    // returns a broadcast intent.
    val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets
    // the callback successfully.For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0)

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.intentSender)
}

자바

ShortcutManager shortcutManager =
        context.getSystemService(ShortcutManager.class);

if (shortcutManager.isRequestPinShortcutSupported()) {
    // Assumes there's already a shortcut with the ID "my-shortcut".
    // The shortcut must be enabled.
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "my-shortcut").build();

    // Create the PendingIntent object only if your app needs to be notified
    // that the user allowed the shortcut to be pinned. Note that, if the
    // pinning operation fails, your app isn't notified. We assume here that the
    // app has implemented a method called createShortcutResultIntent() that
    // returns a broadcast intent.
    Intent pinnedShortcutCallbackIntent =
            shortcutManager.createShortcutResultIntent(pinShortcutInfo);

    // Configure the intent so that your app's broadcast receiver gets
    // the callback successfully.For details, see PendingIntent.getBroadcast().
    PendingIntent successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0);

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.getIntentSender());
}

참고: Android 7.1(API 수준 25) 이하에서 작동하는 지원 라이브러리 API, isRequestPinShortcutSupported(), requestPinShortcut()도 참조하세요. 지원 라이브러리는 지원 중단된 EXTRA_SHORTCUT_INTENT extra로 돌아가 고정 프로세스를 시도합니다.

맞춤 바로가기 활동 만들기

맞춤 대화상자 활동은 &#39;Gmail 런처 아이콘을 홈 화면에 추가하시겠습니까?&#39;라는 메시지를 표시합니다. 맞춤 옵션은 &#39;아니요&#39;와 &#39;아이콘 추가&#39;입니다.
그림 2. 맞춤 앱 바로가기 대화상자 활동의 예

사용자가 맞춤 옵션과 확인 버튼이 있는 바로가기를 만드는 데 도움을 주는 특수 활동을 만들 수도 있습니다. 그림 2는 Gmail 앱에서 이러한 유형의 활동을 보여주는 예입니다.

앱의 매니페스트 파일에서 활동의 <intent-filter> 요소에 ACTION_CREATE_SHORTCUT을 추가합니다. 이 선언은 사용자가 바로가기를 만들려고 할 때 다음 동작을 설정합니다.

  1. 시스템에서 앱의 특수 활동을 시작합니다.
  2. 사용자가 바로가기 옵션을 설정합니다.
  3. 사용자가 확인 버튼을 선택합니다.
  4. 앱에서 createShortcutResultIntent() 메서드를 사용하여 바로가기를 만듭니다. 이 메서드는 앱이 setResult()를 사용하여 이전에 실행한 활동으로 다시 릴레이하는 Intent를 반환합니다.
  5. 앱은 맞춤설정된 바로가기를 만드는 데 사용된 활동에서 finish()를 호출합니다.

마찬가지로 앱은 설치 후 또는 처음 실행될 때 사용자에게 홈 화면에 고정된 바로가기를 추가하라는 메시지를 표시할 수 있습니다. 이 메서드는 사용자가 바로가기를 일상 워크플로의 하나로 만드는 데 도움을 주므로 효과적입니다.

바로가기 테스트

앱의 바로가기를 테스트하려면 바로가기를 지원하는 런처가 있는 기기에 앱을 설치하세요. 그후에 다음 작업을 실행합니다.

  • 앱의 런처 아이콘을 길게 탭하여 앱에 정의한 바로가기 표시
  • 바로가기를 탭하고 드래그하여 기기의 런처에 고정