Mengelola pintasan

Setelah membuat pintasan, Anda mungkin perlu mengelolanya selama masa aktif aplikasi Anda. Misalnya, Anda mungkin ingin mengoptimalkan aplikasi dengan menentukan seberapa sering pengguna menyelesaikan tindakan tertentu dengan pintasan Anda. Pada kasus lain, Anda mungkin ingin menonaktifkan pintasan yang dipasangi pin agar aplikasi tidak melakukan tindakan yang sudah tidak berlaku atau tidak ada. Untuk pintasan yang dirujuk dalam percakapan, Anda mungkin ingin melacak penggunaan untuk memberikan sinyal yang meningkatkan peringkat pintasan.

Halaman ini menjelaskan cara ini dan beberapa cara umum lainnya untuk mengelola pintasan Anda.

Perilaku pintasan

Bagian berikut berisi informasi umum tentang perilaku pintasan, termasuk visibilitas, urutan tampilan, dan peringkat.

Visibilitas pintasan

Pintasan statis dan dinamis muncul di peluncur atau asisten yang didukung saat pengguna menjalankan gestur atau perintah suara tertentu. Pada peluncur yang didukung, gestur yang tersedia adalah sentuh lama pada ikon peluncur aplikasi, tetapi gestur aslinya mungkin berbeda pada aplikasi peluncur lainnya. Dengan Asisten Google, pintasan dapat ditampilkan dalam Asisten atau diluncurkan dari perintah suara pengguna.

Class LauncherApps menyediakan API untuk aplikasi peluncur agar dapat mengakses pintasan.

Karena pintasan yang dipasangi pin muncul di peluncur tersebut, pintasan itu selalu terlihat. Pintasan yang dipasangi pin akan dihapus dari peluncur hanya dalam situasi berikut:

  • Pengguna menghapusnya.
  • Aplikasi yang dikaitkan dengan pintasan tersebut di-uninstal.
  • Pengguna menghapus data aplikasi dengan membuka Setelan > Aplikasi & notifikasi, memilih aplikasi, lalu mengetuk Penyimpanan > Hapus penyimpanan.

Target berbagi adalah subset pintasan dinamis yang muncul di baris berbagi langsung di sheet berbagi Android.

Android Sharesheet
Gambar 1. Android Sharesheet. Target berbagi langsung muncul di baris pertama, diikuti dengan aplikasi yang diberi peringkat, lalu Daftar aplikasi.

Urutan tampilan pintasan

Saat peluncur menampilkan pintasan aplikasi, pintasan harus muncul dalam urutan berikut:

  1. Pintasan statis: pintasan yang metode isDeclaredInManifest()-nya menampilkan true.
  2. Pintasan dinamis: pintasan yang metode ShortcutInfo.isDynamic()-nya menampilkan true.

Dalam setiap jenis pintasan—statis dan dinamis—pintasan diurutkan dalam urutan peringkat dari bawah ke atas sesuai dengan ShortcutInfo.getRank. Asisten Google juga mempertimbangkan peringkat pintasan saat menentukan pintasan kontekstual untuk ditampilkan kepada pengguna.

Peringkat adalah bilangan bulat non-negatif yang berurutan. Pintasan statis diberi peringkat dari pertama hingga terakhir sesuai urutan kemunculannya dalam file shortcuts.xml Anda. Untuk pintasan dinamis, Anda dapat memperbarui peringkat pintasan yang ada saat memanggil updateShortcuts(Context, List), addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat), atau setDynamicShortcuts(Context, List).

Urutan target berbagi didasarkan pada berbagai faktor, termasuk histori pengguna sebelumnya, keaktualan, frekuensi, petunjuk peringkat, penggunaan aplikasi, dan prioritas yang ditetapkan pada percakapan yang terkait dengan pintasan berbagi. Target berbagi yang dibuat menggunakan Sharing Shortcuts API diprioritaskan daripada target berbagi yang dihasilkan oleh ChooserTargetService yang tidak digunakan lagi di Android 11. Di Android 12 dan yang lebih baru, target berbagi yang dibuat oleh ChooserTargetService yang tidak digunakan lagi tidak akan muncul lagi di panel berbagi.

Sebagian besar peluncur menampilkan maksimal empat pintasan. Untuk kombinasi pintasan statis dan pintasan dinamis yang ditentukan, peluncur menampilkan maksimum dua pintasan statis dan dua pintasan dinamis. Misalnya, jika Anda menentukan empat pintasan statis dan membuat tiga pintasan dinamis secara terprogram, peluncur akan menampilkan dua pintasan statis pertama, dan dua pintasan dinamis dengan peringkat tertinggi.

Mengelola beberapa intent dan aktivitas

Jika ingin aplikasi menjalankan beberapa operasi saat pengguna mengaktifkan pintasan, Anda dapat mengonfigurasinya untuk memicu runtunan aktivitas. Anda dapat melakukannya dengan menetapkan beberapa intent, memulai suatu aktivitas dari aktivitas lainnya, atau menetapkan flag intent, bergantung pada jenis pintasan.

Memulai suatu aktivitas dari aktivitas lainnya

Pintasan statis tidak boleh memiliki flag intent kustom. Intent pertama dari pintasan statis selalu memiliki Intent.FLAG_ACTIVITY_NEW_TASK dan Intent.FLAG_ACTIVITY_CLEAR_TASK yang ditetapkan. Artinya, saat aplikasi Anda berjalan, semua aktivitas yang ada di aplikasi akan dihentikan saat pintasan statis diluncurkan. Jika tidak menginginkan perilaku ini, Anda dapat menggunakan aktivitas trampoline—aktivitas tak terlihat yang memulai aktivitas lain—dengan memanggil finish di dalam blok peluncuran atau onCreate sebelum konten Compose ditetapkan:

  1. Dalam AndroidManifest.xml file, sertakan penetapan atribut android:taskAffinity="" dalam aktivitas trampoline.

  2. Dalam file resource pintasan, referensikan aktivitas trampoline dalam intent dalam pintasan statis.

Untuk mengetahui informasi selengkapnya tentang aktivitas trampoline, lihat Memulai satu aktivitas dari aktivitas lain.

Menetapkan flag intent

Anda dapat memublikasikan pintasan dinamis dengan sekumpulan tanda Intent. Sebaiknya, tentukan kombinasi Intent.FLAG_ACTIVITY_SINGLE_TOP dan Intent.FLAG_ACTIVITY_CLEAR_TOP dalam intent pintasan. Hal ini memastikan bahwa jika ComponentActivity Anda sudah aktif, ComponentActivity tersebut akan ditampilkan di latar depan dan digunakan kembali tanpa dihentikan, sehingga arsitektur satu aktivitas Anda dapat menangani peristiwa pintasan dengan baik melalui onNewIntent().

Untuk mempelajari tugas dan flag intent lebih lanjut, lihat Tugas dan data sebelumnya.

Memperbarui pintasan

Setiap ikon peluncur aplikasi dapat berisi, paling banyak, sejumlah pintasan statis dan dinamis yang digabungkan yang sama dengan nilai yang ditampilkan oleh getMaxShortcutCountPerActivity. Tidak ada batasan jumlah pintasan yang dipasangi pin yang dapat dibuat oleh aplikasi.

Saat pintasan dinamis dipasangi pin, pintasan yang dipasangi pin masih terlihat dan dapat diluncurkan, bahkan saat penayang menghapusnya sebagai pintasan dinamis. Hal ini memungkinkan aplikasi memiliki lebih dari getMaxShortcutCountPerActivity jumlah pintasan.

Perhatikan contoh berikut, yang mengasumsikan bahwa nilai yang ditampilkan oleh getMaxShortcutCountPerActivity adalah 4:

  1. Aplikasi chat memublikasikan empat pintasan dinamis, yang merepresentasikan empat percakapan terbaru: c1, c2, c3, dan c4.
  2. Pengguna memasang pin pada keempat pintasan tersebut.
  3. Kemudian, pengguna memulai tiga percakapan tambahan: c5, c6, dan c7. Aplikasi penayang memublikasikan ulang pintasan dinamisnya. Daftar pintasan dinamis baru adalah: c4, c5, c6, dan c7.

Aplikasi harus menghapus c1, c2, dan c3, karena tidak dapat menampilkan lebih dari empat pintasan dinamis. Namun, c1, c2, dan c3 tetap merupakan pintasan yang dipasangi pin yang dapat diakses dan diluncurkan pengguna.

Pengguna kemudian dapat mengakses total tujuh pintasan yang tertaut ke aktivitas di aplikasi penayang. Hal ini karena totalnya mencakup jumlah maksimum pintasan dan tiga pintasan yang dipasangi pin.

  1. Aplikasi dapat menggunakan updateShortcuts(Context, List) untuk memperbarui salah satu dari tujuh pintasan yang ada. Misalnya, Anda dapat memperbarui kumpulan pintasan ini saat ikon chat pasangannya berubah.
  2. Anda dapat menggunakan metode addDynamicShortcuts(Context, List) dan setDynamicShortcuts(Context, List) untuk memperbarui pintasan yang ada dengan ID yang sama. Namun, Anda tidak dapat menggunakannya untuk memperbarui pintasan non-dinamis yang dipasangi pin, karena kedua metode ini mencoba mengonversi daftar pintasan yang diberikan menjadi pintasan dinamis.

Tidak ada batasan jumlah pintasan yang dapat dikirim untuk ditampilkan di aplikasi asisten seperti Asisten Google. Gunakan metode pushDynamicShortcut library Jetpack ShortcutManagerCompat untuk membuat dan mengupdate pintasan untuk digunakan di aplikasi asisten. Selain itu, tambahkan library Integrasi Pintasan Google ke aplikasi Anda agar link dinamis memenuhi syarat untuk muncul di Asisten Google.

Untuk mempelajari lebih lanjut panduan pintasan aplikasi, termasuk cara memperbarui pintasan, lihat Praktik terbaik untuk pintasan.

Menangani perubahan lokal sistem

Aplikasi harus memperbarui pintasan dinamis dan yang dipasangi pin saat menerima siaran Intent.ACTION_LOCALE_CHANGED yang menunjukkan perubahan pada lokal sistem.

Melacak penggunaan pintasan

Untuk menentukan situasi di mana pintasan statis dan dinamis akan muncul, peluncur memeriksa histori pengaktifan pintasan. Untuk pintasan statis, Anda dapat terus melacak kapan pengguna menyelesaikan tindakan tertentu dalam aplikasi Anda dengan memanggil metode reportShortcutUsed dan meneruskan ID pintasan kepadanya saat salah satu peristiwa berikut terjadi:

  • Pengguna memilih pintasan dengan ID yang diberikan.
  • Dalam aplikasi, pengguna menyelesaikan tindakan yang berkaitan dengan pintasan yang sama secara manual.

Aplikasi Anda melacak penggunaan pintasan dinamis dengan memanggil metode pushDynamicShortcut dan meneruskan ID pintasan saat peristiwa yang relevan terjadi. Mendorong penggunaan pintasan dinamis dengan metode ini memungkinkan aplikasi asisten seperti Asisten Google menyarankan pintasan yang relevan kepada pengguna. Karena metode pushDynamicShortcut melaporkan penggunaan saat dipanggil, jangan panggil metode reportShortcutUsed untuk pintasan yang sama.

Untuk pintasan terkait percakapan, penting untuk melacak penggunaan pesan keluar dan masuk. Untuk mengetahui detailnya, lihat praktik terbaik untuk orang dan percakapan.

Menonaktifkan pintasan

Karena aplikasi Anda dan penggunanya dapat menyematkan pintasan ke peluncur perangkat, pintasan yang disematkan ini dapat mengarahkan pengguna ke tindakan dalam aplikasi Anda yang sudah tidak berlaku atau tidak ada lagi. Untuk menangani situasi ini, Anda dapat menonaktifkan pintasan yang tidak Anda izinkan untuk dipilih pengguna dengan memanggil disableShortcuts, yang menghapus pintasan tertentu dari daftar pintasan statis dan dinamis serta menonaktifkan salinan pintasan yang dipasangi pin ini. Anda juga dapat menggunakan versi overload dari metode ini yang menerima CharSequence sebagai pesan error kustom. Pesan error tersebut akan muncul saat pengguna mencoba meluncurkan setiap pintasan yang dinonaktifkan.

Pembatasan kapasitas

Saat menggunakan metode setDynamicShortcuts, addDynamicShortcuts atau updateShortcuts, Anda mungkin hanya dapat memanggil metode ini beberapa kali di aplikasi latar belakang —aplikasi yang tidak memiliki aktivitas atau layanan di latar depan. Batas jumlah waktu di mana Anda dapat memanggil metode ini disebut pembatasan kapasitas. Fitur ini mencegah ShortcutManagerCompat menggunakan resource perangkat secara berlebihan.

Saat pembatasan kapasitas diaktifkan, isRateLimitingActive akan menampilkan nilai benar (true). Namun, pembatasan kapasitas akan direset selama peristiwa tertentu, sehingga aplikasi latar belakang pun dapat memanggil metode ShortcutManager hingga batas kapasitas tercapai lagi. Peristiwa ini mencakup:

  • Aplikasi muncul di latar depan.
  • Perubahan lokal sistem.
  • Pengguna melakukan tindakan balasan inline pada notifikasi.

Jika mendapati pembatasan kapasitas selama pengembangan atau pengujian, Anda dapat memilih Opsi Developer > Reset pembatasan kapasitas ShortcutManager dari setelan perangkat, atau Anda dapat memasukkan perintah berikut di adb:

$ adb shell cmd shortcut reset-throttling [ --user <var>your-user-id</var> ]

Pencadangan dan pemulihan

Anda dapat mengizinkan pengguna melakukan operasi pencadangan dan pemulihan pada aplikasi Anda saat mengganti perangkat dengan menyertakan penerapan atribut android:allowBackup="true" di file manifes aplikasi Anda. Jika Anda mendukung pencadangan dan pemulihan, perhatikan hal berikut tentang pintasan aplikasi:

  • Pintasan statis otomatis dipublikasikan ulang, tetapi hanya setelah pengguna menginstal ulang aplikasi Anda di perangkat barunya.
  • Pintasan dinamis tidak dicadangkan, jadi sertakan logika di aplikasi Anda untuk memublikasikannya kembali saat pengguna membuka aplikasi Anda di perangkat barunya.
  • Pintasan yang dipasangi pin otomatis dipulihkan ke peluncur perangkat, tetapi sistem tidak mencadangkan ikon yang terkait dengan pintasan yang dipasangi pin. Oleh karena itu, simpan gambar pintasan yang dipasangi pin di aplikasi Anda agar mudah dipulihkan di perangkat baru.

Cuplikan kode berikut menunjukkan cara terbaik untuk memulihkan pintasan dinamis aplikasi Anda dan cara memeriksa apakah pintasan yang dipasangi pin di aplikasi Anda dipertahankan atau tidak:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.getDynamicShortcuts(this).isEmpty()) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts(this).isNotEmpty()) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}