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 kullanılan 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 dahil olmak üzere kısayol davranışı hakkında genel bilgiler yer almaktadır.
Kısayol görünürlüğü
Statik kısayollar ve dinamik kısayollar, kullanıcı belirli bir hareketi veya sesli komutu gerçekleştirdiğinde 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.
Sabitlenmiş kısayollar başlatıcının kendisinde göründüğü için her zaman görünür. Sabitlenmiş bir kısayol, başlatıcıdan yalnızca aşağıdaki durumlarda kaldırılır:
- Kullanıcı kaldırır.
- Kısayolla ilişkili uygulama kaldırıldıysa
- 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ıralama düzeninde 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 görüşmede ayarlanan öncelik gibi çeşitli faktörlere bağlıdır. 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ı, birbirini takip eden 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. Statik kısayolun ilk amacı her zaman Intent.FLAG_ACTIVITY_NEW_TASK ve Intent.FLAG_ACTIVITY_CLEAR_TASK olarak ayarlanır. Bu, uygulamanız çalışırken statik bir kısayol başlatıldığında uygulamadaki mevcut tüm etkinliklerin yok edildiği anlamına gelir. Bu davranışın gerçekleşmesini istemiyorsanız başlatma bloğunun içinde veya Compose içeriği ayarlanmadan önce onCreate ç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ğini atama işlemini ekleyinandroid:taskAffinity="".Kısayollar kaynak dosyasında, statik kısayoldaki amaçta 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 işaretleri grubuyla yayınlayabilirsiniz.
Tercihen, kısayolun amacında Intent.FLAG_ACTIVITY_SINGLE_TOP ve Intent.FLAG_ACTIVITY_CLEAR_TOP kombinasyonunu belirtin. Bu sayede, ComponentActivity öğeniz zaten etkinse ön plana getirilir ve yok edilmeden yeniden kullanılır. Böylece tek etkinlikli mimariniz, onNewIntent() üzerinden 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.
Bir yayıncı, dinamik kısayolu kaldırdığında bile, sabitlenmiş dinamik kısayol görünür ve başlatılabilir olmaya devam eder. Bu sayede bir uygulama getMaxShortcutCountPerActivity'den fazla kısayola sahip olabilir.
Aşağıdaki örneği inceleyelim. 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ı üç sohbet 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 dinamik kısayoldan fazlasını 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 katılımcılarının 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 Shortcuts Integration
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.
Sistem yerel ayarı değişikliklerini 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ısayollarda, giden ve gelen iletiler için 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 kullanıcıları uygulamanızda güncel olmayan veya artık mevcut olmayan işlemlere yönlendirebilir. 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 yalnızca belirli sayıda kez arka plan uygulamasında (ön planda etkinliği veya hizmeti olmayan bir uygulama) ç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ırlama 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, sıklık sınırına tekrar ulaşılana kadar arka plandaki uygulamalar bile ShortcutManager yöntemlerini çağırabilir. Bu etkinlikler şunlardır:
- 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 your-user-id ]
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üklemeyi destekliyorsanız uygulama kısayollarıyla ilgili aşağıdaki noktaları aklınızda 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.
}
}
}
// ...
}