Kısayolları yönet

Kısayolları oluşturduktan sonra bunları uygulamanızın kullanım ömrü boyunca yönetmeniz gerekebilir. Örneğin, kullanıcılarınızın kısayollarınızla belirli işlemleri ne sıklıkta tamamladığını belirleyerek uygulamanızı optimize etmek isteyebilirsiniz. Başka bir durumda, uygulamanızın eski veya eksik işlemler gerçekleştirmesini önlemek için sabitlenmiş bir kısayolu devre dışı bırakmaya karar verebilirsiniz. Görüşmelerde referans verilen kısayollar için kısayol sıralamasını iyileştiren sinyaller sağlamak üzere kullanımı izlemek isteyebilirsiniz.

Bu sayfada, bu ve kısayollarınızı yönetmenin diğer yaygın yolları açıklanmaktadır.

Kısayol davranışı

Aşağıdaki bölümlerde görünürlük, görüntüleme sırası ve sıralamalar dahil olmak üzere kısayol davranışı hakkında genel bilgiler yer alır.

Kısayol görünürlüğü

Kullanıcı belirli bir hareket veya sesli komut gerçekleştirdiğinde, desteklenen bir başlatıcıda veya asistanda statik kısayollar ve dinamik kısayollar görünür. Desteklenen başlatıcılarda, hareket, uygulamanın başlatıcı simgesine dokunup basılı tutmaktır, ancak diğer başlatıcı uygulamalarında bu hareket farklı olabilir. Google Asistan ile kısayollar Asistan'da görüntülenebilir veya kullanıcı sesli komutuyla başlatılabilir.

LauncherApps sınıfı, başlatıcı uygulamaların kısayollara erişmesi için API'ler sağlar.

Sabitlenmiş kısayollar başlatıcıda yer aldığından, her zaman görünür durumdadır. Sabitlenmiş kısayol yalnızca aşağıdaki durumlarda başlatıcıdan kaldırılır:

  • Kullanıcı bu cihazı kaldırır.
  • Kısayolla ilişkilendirilmiş uygulamanın yüklemesi kaldırılır.
  • Kullanıcı, Ayarlar > Uygulamalar ve bildirimler'e gidip uygulamayı seçip Depolama Alanı > Depolama alanını temizle'ye dokunarak uygulamanın verilerini siler.

Paylaşım hedefleri, Android paylaşım sayfasının doğrudan paylaşım satırında görünen dinamik kısayolların bir alt kümesidir.

Android Sharesheet'in ekran görüntüsü
Şekil 1. Android Sharesheet. Doğrudan paylaşım hedefleri ilk satırda görünür, bunları sıralanmış uygulamalar ve Uygulama listeleri takip eder.

Kısayol görüntüleme sırası

Başlatıcı bir uygulamanın kısayollarını görüntülediğinde, kısayollar aşağıdaki sırada görünmelidir:

  1. Statik kısayollar: isDeclaredInManifest() yöntemi true döndüren kısayollar.
  2. Dinamik kısayollar: ShortcutInfo.isDynamic() yönteminin true döndürdüğü kısayollar.

Her kısayol türünde (statik ve dinamik) kısayollar, ShortcutInfo.getRank ölçütüne göre artan sıralama sırasına göre sıralanır. Google Asistan, kullanıcılara gösterilecek içeriğe dayalı kısayolları belirlerken kısayol sıralamasını da dikkate alır.

Sıralamalar negatif olmayan, sıralı tam sayılardır. Statik kısayollar, shortcuts.xml dosyanızda göründükleri sırayla ilkten sona doğru sıralanır. Dinamik kısayollar için updateShortcuts(Context, List), addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat) veya setDynamicShortcuts(Context, List) çağrılarını yaptığınızda mevcut kısayolların sıralamalarını güncelleyebilirsiniz.

Paylaşım hedeflerinin sırası; geçmiş kullanıcı geçmişi, yenilik, sıklık, sıralama ipucu, uygulama kullanımı ve paylaşım kısayoluyla ilişkilendirilen görüşmede ayarlanan öncelik gibi çeşitli faktörlere dayanır. Paylaşım Kısayolları API'si kullanılarak oluşturulan paylaşım hedefleri, Android 11'de kullanımdan kaldırılan ChooserTargetService tarafından oluşturulan paylaşım hedeflerine göre önceliklidir. Android 12'de kullanımdan kaldırılan ChooserTargetService tarafından oluşturulan ve daha yüksek paylaşım hedefleri artık paylaşım sayfasında görünmeyecek.

Çoğu başlatıcı en fazla dört kısayol görüntüler. Tanımlanmış statik kısayolların ve dinamik kısayolların herhangi bir kombinasyonu için başlatıcı en fazla iki statik kısayol ve iki dinamik kısayol görüntüler. Örneğin, dört statik kısayol tanımlar ve programatik olarak üç dinamik kısayol oluşturursanız başlatıcı, ilk iki statik kısayolu ve en yüksek sıralamaya sahip iki dinamik kısayolu görüntüler.

Birden fazla amacı ve etkinliği yönetin

Kullanıcınız bir kısayolu etkinleştirdiğinde uygulamanızın birden fazla işlem gerçekleştirmesini istiyorsanız bunu ardışık etkinlikleri tetikleyecek şekilde yapılandırabilirsiniz. Bunu başarmak için birden fazla amaç atayabilir, başka bir etkinlik başlatabilir veya kısayolun türüne bağlı olarak amaç işaretleri ayarlayabilirsiniz.

Birden çok amaç atayın

ShortcutInfoCompat.Builder ile kısayol oluştururken setIntent() yerine setIntents() kullanabilirsiniz. setIntents() yöntemini çağırarak kullanıcı bir kısayol seçtiğinde uygulamanızda birden fazla etkinlik başlatabilir ve listedeki son etkinlik hariç tüm etkinlikleri arka grupta yerleştirebilirsiniz. Kullanıcı daha sonra cihazın geri düğmesine dokunursa cihazın başlatıcısına dönmek yerine uygulamanızda başka bir etkinlik görür.

Bir etkinliği başka bir etkinlikten başlatma

Statik kısayollarda özel amaç işaretleri olamaz. Statik bir kısayolun ilk amacı her zaman Intent.FLAG_ACTIVITY_NEW_TASK ve Intent.FLAG_ACTIVITY_CLEAR_TASK set olur. Yani, uygulamanız çalışırken statik bir kısayol başlatıldığında, uygulamadaki tüm mevcut etkinlikler kaldırılır. Bu davranışı istemiyorsanız Activity.onCreate(Bundle) ürününde Activity.finish() çağrısı yapan bir trampolin etkinliği (başka bir etkinlik başlatan görünmez bir etkinlik) kullanabilirsiniz:

  1. AndroidManifest.xml dosyasına, trambolin etkinliğine android:taskAffinity="" özellik atamasını ekleyin.
  2. Kısayollar kaynak dosyasında, statik kısayoldaki amaçtaki trambolin etkinliğine referans verin.

Trambolin etkinlikleri hakkında daha fazla bilgi için Bir etkinliği diğerinden başlatma bölümüne bakın.

Amaç işaretlerini ayarla

Dinamik kısayolları istediğiniz Intent işaret grubuyla yayınlayabilirsiniz. Tercihen, diğer işaretlerinizle birlikte Intent.FLAG_ACTIVITY_CLEAR_TASK belirtmenizi de tercih edebilirsiniz. Aksi takdirde, uygulamanız çalışırken başka bir görev başlatmaya çalışırsanız hedef etkinlik görünmeyebilir.

Görevler ve amaç işaretleri hakkında daha fazla bilgi edinmek için Görevler ve arka yığın başlıklı makaleyi inceleyin.

Kısayolları güncelleme

Her uygulamanın başlatıcı simgesi, en fazla, getMaxShortcutCountPerActivity tarafından döndürülen değere eşit sayıda statik ve dinamik kısayol içerebilir. Bir uygulamanın oluşturabileceği sabitlenmiş kısayol sayısı için bir sınır yoktur.

Bir dinamik kısayol sabitlendiğinde, yayıncı bu kısayolu dinamik kısayol olarak kaldırsa bile, sabitlenen kısayol yine görünür ve başlatılabilir. Bu, bir uygulamanın getMaxShortcutCountPerActivity() taneden fazla kısayola sahip olmasını sağlar.

getMaxShortcutCountPerActivity() tarafından döndürülen değerin 4 olduğunu varsayan aşağıdaki örneği inceleyin:

  1. Bir sohbet uygulaması, en son dört konuşmayı temsil eden dört dinamik kısayol yayınlar: c1, c2, c3 ve c4.
  2. Kullanıcı kısayolun dördünü de sabitler.
  3. Daha sonra, kullanıcı üç ek görüşme başlatır: c5, c6 ve c7. Yayıncı uygulaması, dinamik kısayollarını yeniden yayınlar. Yeni dinamik kısayol listesi: c4, c5, c6 ve c7.

Dörtten fazla dinamik kısayol gösteremediği için uygulamanın c1, c2 ve c3'ü kaldırması gerekir. Ancak c1, c2 ve c3, kullanıcının erişip başlatabileceği sabitlenmiş kısayollardır.

Böylece kullanıcı, yayıncı uygulamasındaki etkinliklere bağlantı veren toplam yedi kısayola erişebilir. Bunun nedeni, toplamda maksimum sayıda kısayol ve sabitlenmiş üç kısayol bulunmasıdır.

  1. Uygulama, mevcut yedi kısayoldan herhangi birini güncellemek için updateShortcuts(Context, List) kullanabilir. Örneğin, sohbetteki eşlerin simgeleri değişdiğinde bu kısayol grubunu güncelleyebilirsiniz.
  2. Mevcut kısayolları aynı kimliklerle güncellemek için addDynamicShortcuts(Context, List) ve setDynamicShortcuts(Context, List) yöntemlerini kullanabilirsiniz. Ancak, dinamik olmayan, sabitlenmiş kısayolları güncellemek için bunları kullanamazsınız. Çünkü bu iki yöntem, belirtilen kısayol listelerini dinamik kısayollara dönüştürmeye çalışır.

Google Asistan gibi asistan uygulamalarında gösterilmek üzere aktarılabilecek kısayolların sayısı için bir sınır yoktur. Asistan uygulamalarında kullanmak üzere kısayollar oluşturmak ve güncellemek için ShortcutManagerCompat Jetpack kitaplığının pushDynamicShortcut() yöntemini kullanın. Ayrıca, dinamik bağlantıların Google Asistan'da görünmeye uygun olması için uygulamanıza Google Kısayollar Entegrasyonu kitaplığını ekleyin.

Kısayolları güncelleme dahil olmak üzere uygulama kısayolları yönergeler hakkında daha fazla bilgi edinmek için Kısayollarla ilgili en iyi uygulamalar bölümüne bakın.

Sistem yerel ayar değişikliklerini işleme

Uygulamalar, sistem yerel ayarında bir değişiklik yapıldığını belirten Intent.ACTION_LOCALE_CHANGED yayınını aldıklarında dinamik ve sabitlenmiş kısayolları güncellemelidir.

Kısayol kullanımını izleme

Statik ve dinamik kısayolların göründüğü durumları belirlemek için başlatıcı, kısayolların etkinleştirme geçmişini inceler. Statik kısayollar için reportShortcutUsed() yöntemini çağırarak ve aşağıdaki etkinliklerden biri gerçekleştiğinde buna bir kısayol kimliği ileterek kullanıcıların uygulamanızda belirli işlemleri ne zaman tamamladıklarını takip edebilirsiniz:

  • Kullanıcı, verilen kimliğe sahip kısayolu seçer.
  • Kullanıcı, uygulama içinde aynı kısayola karşılık gelen işlemi manuel olarak tamamlar.

Uygulamanız, pushDynamicShortcut() yöntemini çağırarak ve ilgili bir etkinlik gerçekleştiğinde kısayolun kimliğini ileterek dinamik kısayol kullanımını izler. Bu yöntemle dinamik kısayol kullanımını aktarmak, Google Asistan gibi asistan uygulamalarının kullanıcılara alakalı kısayollar önermesini sağlar. pushDynamicShortcut() yöntemi çağrıldığında kullanımı raporladığından aynı kısayollar için reportShortcutUsed() yöntemini çağırmayın.

İleti dizisiyle ilgili kısayollar için giden ve gelen iletilerin kullanımını izlemek önemlidir. Ayrıntılı bilgi için kişiler ve görüşmeler ile ilgili en iyi uygulamaları inceleyin.

Kısayolları devre dışı bırak

Uygulamanız ve kullanıcıları cihazın başlatıcısına kısayollar sabitleyebileceği için bu sabitlenen kısayollar, kullanıcıları uygulamanızda eski veya artık var olmayan işlemlere yönlendirebilir. Bu durumu yönetmek için disableShortcuts yöntemini çağırarak kullanıcıların seçmesini istemediğiniz kısayolları devre dışı bırakabilirsiniz. Bu işlem, belirtilen kısayolları statik ve dinamik kısayollar listesinden kaldırır ve bu kısayolların sabitlenmiş kopyalarını devre dışı bırakır. Bu yöntemin, özel hata mesajı olarak CharSequence kabul eden aşırı yüklenmiş bir sürümünü de kullanabilirsiniz. Kullanıcılar devre dışı bırakılmış bir kısayolu başlatmaya çalıştığında bu hata mesajı görünür.

Hız sınırlaması

setDynamicShortcuts(), addDynamicShortcuts() veya updateShortcuts() yöntemlerini kullanırken bu yöntemleri yalnızca bir arka plan uygulamasında (ön planda hiçbir etkinlik veya hizmet içermeyen bir uygulama) belirli sayıda çağırabilirsiniz. Bu yöntemlerin belirli sayıdaki arama sayısına dair sınıra hız sınırlaması denir. Bu özellik, ShortcutManagerCompat'in cihaz kaynaklarını aşırı kullanmasını önler.

Hız sınırlaması etkinken isRateLimitingActive(), true değerini döndürür. Ancak, hız sınırlaması belirli etkinlikler sırasında sıfırlanır. Böylece, arka plandaki uygulamalar bile hız sınırına tekrar ulaşılana kadar ShortcutManager yöntemlerini çağırabilir. Bu etkinlikler arasında şunlar yer alır:

  • Bir uygulama ön plana gelir.
  • Sistem yerel ayarı değişir.
  • Kullanıcı bir bildirim üzerinde satır içi yanıt işlemini gerçekleştirir.

Geliştirme veya test sırasında hız sınırlamasıyla karşılaşırsanız cihaz ayarlarından Geliştirici Seçenekleri > ShortcutManager hız sınırlamasını sıfırla'yı seçebilir veya adb bölümüne aşağıdaki komutu girebilirsiniz:

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

Yedekleme ve geri yükleme

Uygulamanızın manifest dosyasına android:allowBackup="true" özellik atamasını ekleyerek, kullanıcıların cihaz değiştirirken uygulamanızda yedekleme ve geri yükleme işlemleri gerçekleştirmesine izin verebilirsiniz. Yedekleme ve geri yüklemeyi destekliyorsanız uygulama kısayollarıyla ilgili olarak aşağıdaki noktaları göz önünde bulundurun:

  • Statik kısayollar, kullanıcı uygulamanızı yeni bir cihaza yeniden yükledikten sonra otomatik olarak yeniden yayınlanır.
  • Dinamik kısayollar yedeklenmez. Bu nedenle, bir kullanıcı yeni bir cihazda uygulamanızı açtığında bu kısayolların yeniden yayınlanması için uygulamanıza bir mantık ekleyin.
  • Sabitlenen kısayollar, cihazın başlatıcısına otomatik olarak geri yüklenir ancak sistem, sabitlenmiş kısayollarla ilişkili simgeleri yedeklemez. Bu nedenle, sabitlenmiş kısayollarınızın resimlerini yeni bir cihaza kolayca geri yüklemek için uygulamanıza kaydedin.

Aşağıdaki kod snippet'i, uygulamanızın dinamik kısayollarını en iyi nasıl geri yükleyebileceğinizi ve uygulamanızın sabitlenmiş kısayollarının korunup korunmadığını nasıl kontrol edeceğinizi gösterir:

Kotlin

class MyMainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.dynamicShortcuts.size == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.pinnedShortcuts.size > 0) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}

Java

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) {
                // Pinned shortcuts are restored. Use pdateShortcuts() to make
                // sure they contain up-to-date information.
            }
        }
    }
    // ...
}