Tạo lối tắt

Lối tắt cung cấp các loại nội dung cụ thể cho người dùng bằng cách giúp họ truy cập nhanh vào các phần trong ứng dụng của bạn.

Hình ảnh thể hiện sự tương phản giữa lối tắt ứng dụng và lối tắt được ghim
Hình 1. Lối tắt ứng dụng và lối tắt được ghim.

Cách bạn phân phối nội dung bằng lối tắt phụ thuộc vào trường hợp sử dụng và liệu ngữ cảnh của lối tắt là theo ứng dụng hay do người dùng hướng đến. Mặc dù ngữ cảnh của khẩu lệnh nhanh tĩnh không thay đổi và ngữ cảnh của khẩu lệnh nhanh động cũng liên tục thay đổi, nhưng ứng dụng của bạn sẽ hỗ trợ ngữ cảnh trong cả hai trường hợp. Trong những trường hợp người dùng chọn cách ứng dụng phân phối nội dung cho họ, chẳng hạn như với lối tắt được ghim, thì ngữ cảnh sẽ do người dùng xác định. Các trường hợp sau đây mô tả một số trường hợp sử dụng cho từng loại lối tắt:

  • Lối tắt tĩnh phù hợp nhất với những ứng dụng liên kết đến nội dung bằng một cấu trúc nhất quán trong suốt thời gian người dùng tương tác với ứng dụng. Vì hầu hết trình chạy chỉ hiển thị 4 lối tắt cùng một lúc, nên lối tắt tĩnh sẽ hữu ích để thực hiện một tác vụ thường lệ theo cách nhất quán, chẳng hạn như khi người dùng muốn xem lịch hoặc email của họ theo một cách cụ thể .
  • Lối tắt động được dùng cho các thao tác trong ứng dụng theo ngữ cảnh. Khẩu lệnh nhanh theo ngữ cảnh được điều chỉnh cho phù hợp với các thao tác mà người dùng thực hiện trong ứng dụng. Ví dụ: nếu bạn tạo một trò chơi cho phép người dùng bắt đầu từ cấp độ hiện tại khi khởi chạy, bạn cần thường xuyên cập nhật khẩu lệnh nhanh. Việc sử dụng lối tắt động cho phép bạn cập nhật lối tắt mỗi khi người dùng xoá một cấp độ.
  • Lối tắt được ghim dùng cho các thao tác cụ thể do người dùng thực hiện. Ví dụ: người dùng có thể muốn ghim một trang web cụ thể vào trình chạy. Việc này có lợi vì nó cho phép người dùng thực hiện một thao tác tuỳ chỉnh, chẳng hạn như di chuyển đến trang web chỉ trong một bước, nhanh hơn so với việc sử dụng một thực thể mặc định của trình duyệt.

Tạo lối tắt tĩnh

Lối tắt tĩnh cung cấp đường liên kết đến các thao tác chung trong ứng dụng của bạn và những thao tác này phải nhất quán trong suốt thời gian hoạt động của phiên bản hiện tại của ứng dụng. Các tuỳ chọn phù hợp cho các lối tắt tĩnh bao gồm xem tin nhắn đã gửi, đặt báo thức và hiển thị hoạt động tập thể dục của người dùng trong ngày.

Để tạo một lối tắt tĩnh, hãy làm như sau:

  1. Trong tệp AndroidManifest.xml của ứng dụng, hãy tìm hoạt động có bộ lọc ý định được đặt thành hành động android.intent.action.MAIN và danh mục android.intent.category.LAUNCHER.

  2. Thêm một phần tử <meta-data> vào hoạt động này. Phần tử này tham chiếu đến tệp tài nguyên nơi xác định lối tắt của ứng dụng:

      <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. Tạo tệp tài nguyên mới có tên res/xml/shortcuts.xml.

  4. Trong tệp tài nguyên mới, hãy thêm thành phần gốc <shortcuts> chứa danh sách các phần tử <shortcut>. Trong mỗi phần tử <shortcut>, hãy cung cấp thông tin về một lối tắt tĩnh, bao gồm biểu tượng, nhãn mô tả và ý định mà lối tắt đó khởi chạy trong ứng dụng:

      <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" />
          <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
        </shortcut>
        <!-- Specify more shortcuts here. -->
      </shortcuts>
      

Tuỳ chỉnh các giá trị thuộc tính

Danh sách sau đây bao gồm nội dung mô tả cho các thuộc tính khác nhau trong một lối tắt tĩnh. Cung cấp giá trị cho android:shortcutIdandroid:shortcutShortLabel. Tất cả các giá trị khác là không bắt buộc.

android:shortcutId

Một giá trị cố định kiểu chuỗi đại diện cho lối tắt khi một đối tượng ShortcutManager thực hiện các thao tác trên lối tắt đó.

android:shortcutShortLabel

Cụm từ ngắn gọn mô tả mục đích của lối tắt. Khi có thể, hãy giới hạn tối đa 10 ký tự cho đoạn mô tả ngắn này.

Để biết thêm thông tin, hãy xem setShortLabel().

android:shortcutLongLabel

Cụm từ mở rộng mô tả mục đích của lối tắt. Nếu có đủ không gian, trình chạy sẽ hiển thị giá trị này thay vì android:shortcutShortLabel. Khi có thể, hãy giới hạn độ dài của đoạn mô tả dài ở 25 ký tự.

Để biết thêm thông tin, hãy xem setLongLabel().

android:shortcutDisabledMessage

Thông báo xuất hiện trong trình chạy được hỗ trợ khi người dùng cố gắng chạy một lối tắt đã bị vô hiệu hoá. Thông báo phải giải thích cho người dùng về lý do lối tắt bị vô hiệu hoá. Giá trị của thuộc tính này không có hiệu lực nếu android:enabledtrue.

android:enabled

Xác định xem người dùng có thể tương tác với lối tắt từ một trình chạy được hỗ trợ hay không. Giá trị mặc định của android:enabledtrue. Nếu bạn đặt thành false, hãy đặt android:shortcutDisabledMessage giải thích lý do bạn tắt lối tắt. Nếu bạn cho rằng không cần đưa ra thông báo như vậy, hãy xoá hoàn toàn lối tắt khỏi tệp XML.

android:icon

bitmap hoặc biểu tượng thích ứng mà trình chạy sử dụng khi hiển thị lối tắt cho người dùng. Giá trị này có thể là đường dẫn đến một hình ảnh hoặc tệp tài nguyên chứa hình ảnh. Sử dụng biểu tượng thích ứng bất cứ khi nào có thể để cải thiện hiệu suất và tính nhất quán.

Định cấu hình các thành phần bên trong

Tệp XML liệt kê các lối tắt tĩnh của một ứng dụng hỗ trợ các phần tử sau đây bên trong mỗi phần tử <shortcut>. Bạn phải thêm một phần tử bên trong intent cho mỗi lối tắt tĩnh mà bạn xác định.

intent

Thao tác mà hệ thống khởi chạy khi người dùng chọn lối tắt. Ý định này phải cung cấp một giá trị cho thuộc tính android:action.

Bạn có thể cung cấp nhiều ý định cho một lối tắt. Hãy xem phần Quản lý nhiều ý định và hoạt động, Đặt ý định và tài liệu tham khảo về lớp TaskStackBuilder để biết thông tin chi tiết.

categories

Cung cấp một nhóm các loại thao tác mà lối tắt của ứng dụng thực hiện, chẳng hạn như tạo tin nhắn trò chuyện mới.

Để biết danh sách các danh mục lối tắt được hỗ trợ, hãy xem tài liệu tham khảo về lớp ShortcutInfo.

capability-binding

Khai báo chức năng liên kết với lối tắt.

Trong ví dụ trước, lối tắt được liên kết với một chức năng được khai báo cho CREATE_MESSAGE, tức là ý định tích hợp Hành động trong ứng dụng. Tính năng liên kết chức năng này cho phép người dùng sử dụng các lệnh thoại thông qua Trợ lý Google để gọi một khẩu lệnh nhanh.

Tạo lối tắt động

Lối tắt động cung cấp đường liên kết đến các thao tác cụ thể, phụ thuộc vào ngữ cảnh trong ứng dụng của bạn. Những thao tác này có thể thay đổi giữa các lần sử dụng ứng dụng và trong khi ứng dụng đang chạy. Cách sử dụng phù hợp cho lối tắt động: gọi cho một người cụ thể, di chuyển đến một vị trí cụ thể và tải trò chơi từ điểm lưu gần đây nhất của người dùng. Bạn cũng có thể dùng các phím tắt động để mở một cuộc trò chuyện.

Thư viện Jetpack ShortcutManagerCompat là một công cụ trợ giúp cho API ShortcutManager, cho phép bạn quản lý các lối tắt động trong ứng dụng của mình. Việc sử dụng thư viện ShortcutManagerCompat sẽ làm giảm mã nguyên mẫu và đảm bảo rằng lối tắt của bạn hoạt động nhất quán trên các phiên bản Android. Bạn cũng cần thư viện này để đẩy các lối tắt động để các lối tắt đó đủ điều kiện xuất hiện trên các nền tảng của Google (chẳng hạn như Trợ lý) thông qua Thư viện tích hợp lối tắt của Google.

API ShortcutManagerCompat cho phép ứng dụng của bạn thực hiện các thao tác sau đây bằng lối tắt động:

  • Đẩy và cập nhật: sử dụng pushDynamicShortcut() để phát hành và cập nhật lối tắt động. Nếu đã có lối tắt động hoặc được ghim có cùng mã nhận dạng, thì mỗi lối tắt có thể thay đổi sẽ cập nhật.
  • Remove (Xoá): Xoá một nhóm lối tắt động bằng removeDynamicShortcuts(). Xoá tất cả lối tắt động bằng removeAllDynamicShortcuts().

Để biết thêm thông tin về cách thực hiện các thao tác trên lối tắt, hãy xem phần Quản lý lối tắt và tài liệu tham khảo ShortcutManagerCompat.

Dưới đây là ví dụ về cách tạo một lối tắt động và liên kết lối tắt đó với ứng dụng của bạn:

Kotlin


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

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

Java


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

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut);

Thêm Thư viện tích hợp lối tắt của Google

Thư viện tích hợp lối tắt của Google là thư viện Jetpack không bắt buộc. Thư viện này cho phép bạn đẩy các lối tắt động có thể hiển thị trên nền tảng Android (chẳng hạn như trình chạy và các nền tảng của Google, chẳng hạn như Trợ lý). Việc sử dụng thư viện này sẽ giúp người dùng khám phá các lối tắt để nhanh chóng truy cập vào nội dung cụ thể hoặc các hành động phát lại trong ứng dụng của bạn.

Ví dụ: ứng dụng nhắn tin có thể đẩy lối tắt động cho một người liên hệ có tên là "Alex" sau khi người dùng nhắn tin cho người đó. Sau khi lối tắt động được đẩy, nếu người dùng hỏi Trợ lý: "Ok Google, nhắn tin cho Alex trên ExampleApp", Trợ lý có thể chạy ExampleApp và tự động định cấu hình để gửi tin nhắn cho Alex.

Các lối tắt động được đẩy bằng thư viện này không phải tuân theo các giới hạn đối với lối tắt được thực thi trên từng thiết bị. Nhờ vậy, ứng dụng của bạn có thể đẩy khẩu lệnh nhanh mỗi khi người dùng hoàn tất một hành động liên kết trong ứng dụng. Việc đẩy khẩu lệnh nhanh thường xuyên theo cách này giúp Google hiểu được kiểu sử dụng của người dùng và đề xuất khẩu lệnh nhanh phù hợp về ngữ cảnh cho họ.

Ví dụ: Trợ lý có thể học từ các lối tắt được đẩy lên từ ứng dụng theo dõi thể chất mà người dùng thường chạy mỗi sáng và chủ động đề xuất một khẩu lệnh nhanh "bắt đầu chạy" khi người dùng nhấc điện thoại lên vào buổi sáng.

Thư viện tích hợp lối tắt của Google không cung cấp chức năng có thể định địa chỉ nào. Việc thêm thư viện này vào ứng dụng của bạn cho phép các nền tảng của Google lấy lối tắt mà ứng dụng đẩy lên bằng ShortcutManagerCompat.

Để sử dụng thư viện này trong ứng dụng, hãy làm theo các bước sau:

  1. Cập nhật tệp gradle.properties để hỗ trợ thư viện AndroidX:

          
          android.useAndroidX=true
          # Automatically convert third-party libraries to use AndroidX
          android.enableJetifier=true
          
          
  2. Trong app/build.gradle, hãy thêm các phần phụ thuộc cho Thư viện tích hợp lối tắt của Google và ShortcutManagerCompat:

          
          dependencies {
            implementation "androidx.core:core:1.6.0"
            implementation 'androidx.core:core-google-shortcuts:1.0.0'
            ...
          }
          
          

Khi các phần phụ thuộc thư viện được thêm vào dự án Android, ứng dụng của bạn có thể sử dụng phương thức pushDynamicShortcut() từ ShortcutManagerCompat để đẩy các lối tắt động đủ điều kiện hiển thị trên trình chạy và các nền tảng tham gia của Google.

Tạo lối tắt được ghim

Bạn có thể tạo lối tắt được ghim trên Android 8.0 (API cấp 26) trở lên. Không giống như lối tắt tĩnh và động, lối tắt được ghim sẽ xuất hiện trong các trình chạy được hỗ trợ dưới dạng biểu tượng riêng biệt. Hình 1 cho thấy sự khác biệt giữa 2 loại lối tắt này.

Để ghim lối tắt vào trình chạy được hỗ trợ bằng ứng dụng của bạn, hãy hoàn tất các bước sau:

  1. Sử dụng isRequestPinShortcutSupported() để xác minh rằng trình chạy mặc định của thiết bị có hỗ trợ tính năng ghim lối tắt trong ứng dụng.
  2. Tạo đối tượng ShortcutInfo theo một trong hai cách, tuỳ thuộc vào việc lối tắt có tồn tại hay không:

    1. Nếu lối tắt này tồn tại, hãy tạo một đối tượng ShortcutInfo chỉ chứa mã nhận dạng của lối tắt hiện có. Hệ thống sẽ tự động tìm và ghim tất cả thông tin khác liên quan đến lối tắt.
    2. Nếu bạn ghim một lối tắt mới, hãy tạo một đối tượng ShortcutInfo chứa mã nhận dạng, ý định và nhãn ngắn cho lối tắt mới.
  3. Ghim lối tắt vào trình chạy của thiết bị bằng cách gọi requestPinShortcut(). Trong quá trình này, bạn có thể truyền vào đối tượng PendingIntent. Đối tượng này chỉ thông báo cho ứng dụng khi ghim lối tắt thành công.

    Sau khi lối tắt được ghim, ứng dụng của bạn có thể cập nhật nội dung bằng phương thức updateShortcuts(). Để biết thêm thông tin, hãy đọc phần Cập nhật lối tắt.

Đoạn mã sau đây minh hoạ cách tạo lối tắt được ghim.

Kotlin

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

if (shortcutManager!!.isRequestPinShortcutSupported) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfo.Builder(context, "my-shortcut").build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements 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)
}

Java

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

if (shortcutManager.isRequestPinShortcutSupported()) {
    // Enable the existing shortcut with the ID "my-shortcut".
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "my-shortcut").build();

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements 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());
}

Tạo một hoạt động lối tắt tuỳ chỉnh

Một hình ảnh minh hoạ hoạt động của hộp thoại tuỳ chỉnh cho thấy lời nhắc &quot;Bạn có muốn thêm biểu tượng trình chạy Gmail vào màn hình chính không?&quot; Các tuỳ chọn tuỳ chỉnh là &quot;Không, cảm ơn&quot; và &quot;Thêm biểu tượng&quot;.
Hình 2. Ví dụ về hoạt động hộp thoại lối tắt ứng dụng tuỳ chỉnh.

Bạn cũng có thể tạo một hoạt động chuyên biệt giúp người dùng tạo lối tắt, hoàn chỉnh với các tuỳ chọn tuỳ chỉnh và một nút xác nhận. Hình 2 hiển thị ví dụ về loại hoạt động này trong ứng dụng Gmail.

Trong tệp kê khai của ứng dụng, hãy thêm ACTION_CREATE_SHORTCUT vào phần tử <intent-filter> của hoạt động. Khai báo này thiết lập hành vi sau đây khi người dùng cố gắng tạo lối tắt:

  1. Hệ thống sẽ bắt đầu hoạt động đặc biệt của ứng dụng.
  2. Người dùng đặt các tuỳ chọn cho phím tắt.
  3. Người dùng chọn nút xác nhận.
  4. Ứng dụng của bạn tạo lối tắt bằng phương thức createShortcutResultIntent(). Phương thức này trả về một Intent mà ứng dụng của bạn sẽ chuyển tiếp trở lại hoạt động được thực thi trước đó bằng setResult().
  5. Ứng dụng của bạn gọi finish() dựa trên hoạt động dùng để tạo lối tắt tuỳ chỉnh.

Tương tự, ứng dụng của bạn có thể nhắc người dùng thêm lối tắt được ghim vào màn hình chính sau khi cài đặt hoặc trong lần đầu tiên chạy ứng dụng. Phương thức này hiệu quả vì giúp người dùng tạo một lối tắt trong quy trình làm việc thông thường.

Kiểm thử lối tắt

Để kiểm thử lối tắt của ứng dụng, hãy cài đặt ứng dụng trên thiết bị có trình chạy hỗ trợ lối tắt. Sau đó, thực hiện những thao tác sau:

  • Chạm và giữ biểu tượng trình chạy của ứng dụng để xem các lối tắt mà bạn xác định cho ứng dụng.
  • Kéo một lối tắt để ghim vào trình chạy của thiết bị.