Kısayolları oluşturduktan sonra, uygulamanızın kullanım ömrü boyunca bunları 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 ise uygulamanızın eski veya eksik işlemleri gerçekleştirmesini önlemek için sabitlenmiş bir kısayolu devre dışı bırakmaya karar verebilirsiniz. Sohbetlerde referans verilen kısayollar için, kısayol sıralamasını iyileştiren sinyaller sağlamak amacıyla kullanımı izlemek isteyebilirsiniz.
Bu sayfada, bu yöntemlerin yanı sıra kısayollarınızı yönetmek için kullanabileceğiniz diğer yaygın yöntemler 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 da dahil olmak üzere kısayol davranışı hakkında genel bilgiler yer almaktadır.
Kısayol görünürlüğü
Kullanıcı belirli bir hareketi veya sesli komutu gerçekleştirdiğinde statik kısayollar ve dinamik kısayollar desteklenen bir başlatıcıda ya da asistanda görünür. Desteklenen başlatıcılarda hareket, uygulamanın başlatıcı simgesine dokunup basılı tutmaktır. Ancak hareket, diğer başlatıcı uygulamalarında farklı olabilir. Google Asistan ile kısayollar, Asistan'da gösterilebilir veya kullanıcı sesli komutuyla başlatılabilir.
LauncherApps sınıfı, başlatıcı uygulamalarının kısayollara erişmesi için API'ler sağlar.
Sabitlenen kısayollar başlatıcının kendisinde göründüğünden her zaman görünür durumdadır. Sabitlenmiş bir kısayol, başlatıcıdan yalnızca aşağıdaki durumlarda kaldırılır:
- Kullanıcı kaldırırsa
- Kısayolla ilişkili uygulama kaldırılmışsa
- Kullanıcı, Ayarlar > Uygulamalar & bildirimler'e gidip uygulamayı seçtikten sonra Depolama alanı > Depolama alanını temizle'ye dokunarak uygulamanın verilerini temizler.
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.
Kısayol görüntüleme sırası
Başlatıcı, bir uygulamanın kısayollarını gösterdiğinde bunlar aşağıdaki sırada görünmelidir:
- Statik kısayollar:
isDeclaredInManifest()yöntemitruedöndüren kısayollar. - Dinamik kısayollar:
ShortcutInfo.isDynamic()yöntemitruedeğerini döndüren kısayollar.
Her kısayol türünde (statik ve dinamik) kısayollar, ShortcutInfo.getRank'e göre artan sıraya göre sıralanır. Google Asistan, kullanıcılara gösterilecek bağlamsal 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ıraya göre 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) işlevini çağırdığınızda mevcut kısayolların sıralarını güncelleyebilirsiniz.
Paylaşım hedeflerinin sırası; geçmiş kullanıcı geçmişi, güncellik, sıklık, sıra ipucu, uygulama kullanımı ve paylaşım kısayoluyla ilişkili sohbette ayarlanan öncelik gibi çeşitli faktörlere göre belirlenir. Paylaşım Kısayolları API kullanılarak oluşturulan paylaşım hedeflerine, Android 11'de desteği sonlandırılan ChooserTargetService tarafından oluşturulan paylaşım hedeflerine göre öncelik verilir. Android 12 ve sonraki sürümlerde, kullanımdan kaldırılan ChooserTargetService tarafından oluşturulan paylaşım hedefleri artık paylaşım sayfasında görünmeyecek.
Çoğu başlatıcıda en fazla dört kısayol gösterilir. Tanımlanan statik kısayollar ve dinamik kısayolların herhangi bir kombinasyonunda başlatıcı, en fazla iki statik kısayol ve iki dinamik kısayol gösterir. Örneğin, dört statik kısayol tanımlayıp üç dinamik kısayolu programatik olarak oluşturursanız başlatıcı, ilk iki statik kısayolu ve en yüksek sıralamaya sahip iki dinamik kısayolu gösterir.
Birden fazla amaç ve etkinliği yönetme
Kullanıcınız bir kısayolu etkinleştirdiğinde uygulamanızın birden fazla işlem gerçekleştirmesini istiyorsanız uygulamanızı, art arda etkinlikleri tetikleyecek şekilde yapılandırabilirsiniz. Kısayolun türüne bağlı olarak birden fazla amaç atayarak, bir etkinlikten diğerini başlatarak veya amaç işaretleri ayarlayarak bunu yapabilirsiniz.
Bir etkinlikten başka bir etkinlik başlatma
Statik kısayollarda özel amaç işaretleri olamaz. Sabit kısayolun ilk amacı her zaman Intent.FLAG_ACTIVITY_NEW_TASK ve Intent.FLAG_ACTIVITY_CLEAR_TASK olarak ayarlanır. Bu nedenle, uygulamanız çalışırken statik bir kısayol başlatıldığında uygulamadaki mevcut tüm etkinlikler yok edilir. Bu davranışın gerçekleşmesini istemiyorsanız başlatma bloğunda veya Compose içeriği ayarlanmadan önce onCreate içinde finish'i çağırarak başka bir etkinliği başlatan görünmez bir etkinlik olan trambolin etkinliği kullanabilirsiniz:
Trambolin etkinliğinde
AndroidManifest.xml fileözelliğineandroid:taskAffinity=""özelliğini atayın.Kısayollar kaynak dosyasında, statik kısayoldaki intent içinde trambolin etkinliğine referans verin.
Trambolin etkinlikleri hakkında daha fazla bilgi için Bir etkinlikten diğerini başlatma başlıklı makaleyi inceleyin.
Amaç işaretlerini ayarlama
Dinamik kısayolları herhangi bir Intent grubuyla yayınlayabilirsiniz.
Tercihen, kısayolun amacında Intent.FLAG_ACTIVITY_SINGLE_TOP ve Intent.FLAG_ACTIVITY_CLEAR_TOP kombinasyonunu belirtin. Bu sayede, ComponentActivity zaten etkinse yok edilmeden ön plana getirilir ve yeniden kullanılır. Böylece tek etkinlikli mimariniz, onNewIntent() aracılığıyla kısayol etkinliğini sorunsuz bir şekilde işleyebilir.
Görevler ve amaç işaretleri hakkında daha fazla bilgi edinmek için Görevler ve geri 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ıyla ilgili bir sınır yoktur.
Yayıncı, dinamik kısayol olarak kaldırmış olsa bile, sabitlenmiş dinamik kısayollar görünür ve başlatılabilir olmaya devam eder. Bu, bir uygulamanın getMaxShortcutCountPerActivity'den fazla kısayola sahip olmasına olanak tanır.
Aşağıdaki örneği inceleyin. Bu örnekte, getMaxShortcutCountPerActivity tarafından döndürülen değerin 4 olduğu varsayılmaktadır:
- Bir sohbet uygulaması, en son dört görüşmeyi temsil eden dört dinamik kısayol yayınlıyor: c1, c2, c3 ve c4.
- Kullanıcı, dört kısayolun dördünü de sabitler.
- Daha sonra kullanıcı üç görüşme daha 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.
Uygulama, dört adetten fazla dinamik kısayol görüntüleyemediği için c1, c2 ve c3'ü kaldırmalıdır. Ancak c1, c2 ve c3, kullanıcının erişip başlatabileceği sabitlenmiş kısayollar olmaya devam eder.
Kullanıcı daha sonra yayıncı uygulamasındaki etkinliklere bağlanan toplam yedi kısayola erişebilir. Bunun nedeni, toplamda maksimum sayıda kısayol ve üç sabitlenmiş kısayolun bulunmasıdır.
- Uygulama, mevcut yedi kısayoldan herhangi birini güncellemek için
updateShortcuts(Context, List)kullanabilir. Örneğin, sohbet eden kişilerin simgeleri değiştiğinde bu kısayol grubunu güncelleyebilirsiniz. - Mevcut kısayolları aynı kimliklerle güncellemek için
addDynamicShortcuts(Context, List)vesetDynamicShortcuts(Context, List)yöntemlerini kullanabilirsiniz. Ancak, bu iki yöntem verilen kısayol listelerini dinamik kısayollara dönüştürmeye çalıştığından, bunları dinamik olmayan, sabitlenmiş kısayolları güncellemek için kullanamazsınız.
Google Asistan gibi asistan uygulamalarında gösterilmek üzere gönderilebilecek kısayol sayısıyla ilgili bir sınır yoktur. Yardımcı uygulamalarda kullanılacak 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 de dahil olmak üzere uygulama kısayollarıyla ilgili kurallar hakkında daha fazla bilgi edinmek için Kısayollarla ilgili en iyi uygulamalar başlıklı makaleyi inceleyin.
Sistemin yerel ayarındaki değişiklikleri işleme
Uygulamalar, sistem yerelinde değişiklik olduğunu belirten Intent.ACTION_LOCALE_CHANGED yayını aldıklarında dinamik ve sabitlenmiş kısayolları güncellemelidir.
Kısayol kullanımını izleme
Başlatıcı, statik ve dinamik kısayolların hangi durumlarda görüneceğini belirlemek için kısayolların etkinleştirme geçmişini inceler. Statik kısayollar için aşağıdaki etkinliklerden biri gerçekleştiğinde reportShortcutUsed yöntemini çağırıp kısayolun kimliğini ileterek kullanıcıların uygulamanızda belirli işlemleri ne zaman tamamladığını takip edebilirsiniz:
- Kullanıcı, belirli kimliğe sahip kısayolu seçer.
- Kullanıcı, uygulamada aynı kısayola karşılık gelen işlemi manuel olarak tamamlar.
Uygulamanız, alakalı bir etkinlik gerçekleştiğinde pushDynamicShortcut yöntemini çağırarak ve kısayolun kimliğini ileterek dinamik kısayolların kullanımını izler.
Bu yöntemle dinamik kısayol kullanımını teşvik etmek, Google Asistan gibi asistan uygulamalarının kullanıcılara alakalı kısayollar önermesine olanak tanır. pushDynamicShortcut yöntemi çağrıldığında kullanımı bildirdiğinden aynı kısayollar için reportShortcutUsed yöntemini çağırmayın.
İleti dizisiyle ilgili kısayollar için giden ve gelen iletilerdeki kullanımı izlemek önemlidir. Ayrıntılı bilgi için kullanıcılar ve sohbetlerle ilgili en iyi uygulamalara bakın.
Kısayolları devre dışı bırakma
Uygulamanız ve kullanıcıları, cihazın başlatıcısına kısayollar sabitleyebildiğinden, bu sabitlenmiş kısayolların kullanıcıları uygulamanızda güncel olmayan veya artık mevcut olmayan işlemlere yönlendirmesi mümkündür. Bu durumu yönetmek için kullanıcıların seçmesini istemediğiniz kısayolları disableShortcuts işlevini çağırarak devre dışı bırakabilirsiniz. Bu işlev, 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. Bu hata mesajı, kullanıcılar devre dışı bırakılan bir kısayolu başlatmaya çalıştığında gösterilir.
Sıklık sınırlaması
setDynamicShortcuts, addDynamicShortcuts veya updateShortcuts yöntemlerini kullanırken bu yöntemleri arka plan uygulamasında (ön planda etkinliği veya hizmeti olmayan bir uygulama) yalnızca belirli sayıda çağırabilirsiniz.
Bu yöntemleri belirli sayıda çağırma sınırı sıklık sınırlaması olarak adlandırılır. Bu özellik, ShortcutManagerCompat uygulamasının cihaz kaynaklarını aşırı kullanmasını engeller.
Sıklık sınırlaması etkin olduğunda isRateLimitingActive true değerini döndürür.
Ancak belirli etkinlikler sırasında sıklık sınırlaması sıfırlanır. Bu nedenle, arka plan uygulamaları bile sıklık sınırı tekrar aşılana kadar ShortcutManager yöntemlerini çağırabilir. Bu etkinlikler aşağıdakileri içerir:
- Bir uygulama ön plana geldiğinde
- Sistemin yerel ayarı değiştiğinde
- Kullanıcı, bir bildirimde satır içi yanıt işlemini gerçekleştirir.
Geliştirme veya test sırasında sıklık sınırlamasıyla karşılaşırsanız cihazın ayarlarından Geliştirici Seçenekleri > ShortcutManager sıklık sınırlamasını sıfırla'yı seçebilir veya adb'e aşağıdaki komutu girebilirsiniz:
$ adb shell cmd shortcut reset-throttling [ --user <var>your-user-id</var> ]
Yedekleme ve geri yükleme
Uygulamanızın manifest dosyasına android:allowBackup="true" özelliği atamasını ekleyerek kullanıcıların cihaz değiştirirken uygulamanızda yedekleme ve geri yükleme işlemleri yapmasına izin verebilirsiniz. Yedekleme ve geri yükleme özelliğini destekliyorsanız uygulama kısayollarıyla ilgili aşağıdaki noktaları göz önünde bulundurun:
- Statik kısayollar otomatik olarak yeniden yayınlanır ancak yalnızca kullanıcı uygulamanızı yeni bir cihaza yeniden yükledikten sonra.
- Dinamik kısayollar yedeklenmez. Bu nedenle, kullanıcı uygulamanızı yeni bir cihazda açtığında dinamik kısayolları yeniden yayınlamak için uygulamanıza mantık ekleyin.
- Sabitlenmiş 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 uygulamanıza kaydedin. Böylece, yeni bir cihazda bunları hızlıca geri yükleyebilirsiniz.
Aşağıdaki kod snippet'inde, uygulamanızın dinamik kısayollarını en iyi şekilde nasıl geri yükleyeceğiniz ve uygulamanızın sabitlenmiş kısayollarının korunup korunmadığını nasıl kontrol edeceğiniz gösterilmektedir:
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.
}
}
}
// ...
}