Android App Shortcuts

AppShorcut uygulama iconuna uzun basarak uygulama içindeki herhangi bir fonksiyona kısa yoldan ulaşmamızı sağlar. Genellikle uygulama içerisinde yaygın olarak kullanılan özellikler eklenir ve bu sayede kullanıcı menüler içerisinde kaybolmadan istediği yere tek bir dokunuşla ulaşabilir. Örneğin twitter uygulamasının shortcutları aşağıdaki gibidir.


Twitter Shortcut

Shortcutlar Android Nougat 7.1(API 25) ve üzerine sahip cihazlar tarafından görülebilir. Bir uygulamaya en fazla 5 tane shortcut eklenebilir.


Nasıl Eklenir?

Shortcutlar dinamik ve statik olmak üzere iki farklı yoldan eklenebilir. Statik shortcutlar xml dosyası aracılığıyla eklenir ki bu da kullanıcı uygulamayı güncellemeden uygulamanın shortcutlarını değiştiremeyeceğimiz anlamına gelir. Dinamik shortcut ise runtimeda eklenebilir ve kaldırılabilir. Bu da bazı uygulamalara büyük esneklik sağlar. Örneğin spotify bize en çok dinlediğimiz favori müzikleri göstermek isterse müzikler sürekli değişeceğinden dolayı dinamik shortcut kullanması uygun olacaktır.


Static Shortcuts

Statik shortutları eklemek isterken AndroidManifest.xml içersine LAUNCHER activityimize aşağıdaki kodu eklememiz gerekiyor. Birden fazla LAUNCHER activity varsa hepsine eklemelisiniz.


android:resource : Shortcutları tanımladığımız xml dosyasını yazmamız gereken yer.

AndroidManifest dosyası aşağıdaki gibi oldu.


Ardından shortcutları tanımlayacağımız shortcuts.xml dosyasını oluşturmamız gerekli. İlk olarak yazı yaz shortcutını oluşturacağım.

android:shortcutId: Her bir shortcut için unique bir shortcut id tanımlamamız gerekiyor. Id tanımlamasını yapmazsak shortcut oluşmayacaktır.


android:shortcutLongLabel : 25 karaktere kadar tanımlanabilir. Eğer ekranda yeteri kadar yer varsa bu mesaj gösterilecektir.


android:shortcutShortLabel : 10 karaktere kadar tanımlanabilir. Eğer long labeli gösterecek kadar alan yoksa bu mesaj gösterilecektir.


android:enabled : Shortcut'ın gösterilmesi için true olarak tanımlanmalı. Default değeri zaten true olduğu için aslında eklememize gerek yoktu ancak bazen false yapmak isteyebileceğimizden dolayı eklemek istedim.


android:icon : Icon dosyamızın yerini göstereceğiz. Belirli standartları var buna göre tanımlamamız daha doğru olacaktır. Standartlara buradan ulaşabilirsiniz. Ardından shorcut tıklandığında çalışacak intenti yazmamız gerekiyor.


android:targetClass : Çalışacak classı yazdığımız yer.


android:action: Zorunlu bir alandır. Eğer sadece targetClassı açmak istiyorsanız "android.intent.action.VIEW" kullanabilirsiniz. Eğer aynı targetClass içerisinde birden fazla shortcutınız varsa ayırmak için ayırıcı bir değer vermemiz gerekiyor. Örneğin kısayol olarak yazı editlemeyi de eklersem ve targetClass olarak MainActivity'i yazarsam aynı activityi açacak iki tane shortcut olacağından bunları ayırmam için action olarak com.onurkaragunlu.edit diyebilirim. Aşağıdaki MainActivity dosyasından görüldüğü üzere else koşulunu yazmam yeterli olacaktır.

//do something yazılı yere isterseniz bir fragment ya da bir activity açarak yazı sayfasına yönlendirebilirsiniz.


Uygulamayı çalıştırıp shortcut'a baktığımızda aşağıdaki gibi bir görüntü olacaktır.



Dynamic Shortcuts

Dinamik shortcutları kod içerisinde herhangi bir xml dosyasına gerek olmadan ekleyebiliriz. Bunun için createShortCuts() adında bir fonksiyon yazdım ve bunu MainActivity'de onCreate içersinde çağırdım. Bu sayede uygulama ilk kez çalıştığında shorcut eklemiş olacak.



İlk olarak daha önce belirtiğim gibi shortcutlar API 25 ve üzerinde görülebileceğinden versiyon kontrolü yapmamız gerekiyor. Ardından ShortcutManager nesnesi oluşturuyorum ki bu nesne üzerinden uygulama içerisindeki dinamik shortcutların tüm bilgilerine ulaşabilelim. Daha sonra her seferinde var olan bir shorcutı tekrar tekrar oluşturmak istemediğimden dolayı uygulama içerisindeki dinamik shortcut sayısını shortcutManager.dynamicShortcuts.size ile kontrol ediyorum. Ek olarak belirteyim shortcut sayısına bakmayıp tüm shortcutların idleri üzerinden de kontrol yapılabilir. Ardından ShortcutInfo nesnesi ile xml dosyasından tanımladığım gibi shortcutı oluşturuyorum.Buradaki içerikler xml dosyası ile aynı olduğundan dolayı tekrar üzerinden geçmeye gerek yok.

Son olarak da setDynamicShortcuts diyerek dinamik shortcut oluşturma işlemini tamamlıyorum ve MainActivity classım aşağıdaki gibi oluyor.



Son durumda uygulama içerisine bir tane statik ve bir tane dinamik shortcut eklemiş oldum. Her ikisini de bir arada kullanabiliriz.


Pinned Shortcut

Son olarak da pinned shortcutlardan bahsetmek istiyorum. Uygulamanın kısa yollarını geliştiriciler olarak biz belirliyoruz peki ya kullanıcılar kendileri belirlemek isterse? Pinned shortcut da tam burada devreye giriyor ve kullanıcaya istediği yerin kısayolunu ekrana ekleme fırsatı veriyor.

Ekrana bir buton koyup kullanıcı butona tıkladığında shortcut eklemesini yapalım. Pinned shortcutlar Android 8 ve sonrasını desteklediği için öncelikle versiyon kontrolünü ekliyorum. Daha sonra var pinnedShortcutList = shortcutManager.pinnedShortcuts ile tüm pinned shortcut ların listesini çekip daha önce delete shortcutın eklenip eklenmediğini kontrol ediyorum. Ardından shortcutımı oluşturuyorum ki burası static shortcut ile aynı şekilde oluşturuluyor. Son olarak shortcutManager.requestPinShortcut(shortcut, null); diyerek kullanıcıdan izin istiyorum.



Kullanıcı butona tıkladığında aşağıdaki gibi bir ekran çıkıyor ve kullanıcı izin verirse shortcutımız ekleniyor.



Hatta istersek shortcutın adını ve iconu bile kullanıcıdan alabilecek şekilde shortcut ekleme ekranı bile tasarlayabiliriz...


Github repository: https://github.com/onurkaragunlu/AppShortcutExample

Referans ve daha fazla detay için:

https://developer.android.com/guide/topics/ui/shortcuts

https://medium.com/@andreworobator/implementing-android-app-shortcuts-74feb524959b


#appshortcut #android


Komünite

Platform

  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains.png

© 2020 by mobiler.dev

mobilerdevLogo.jpg
mobiler-17.png
mobiler-17.png