Kısayol oluşturma

Kısayollar, kullanıcılarınızın uygulamanızın bölümlerine hızlı bir şekilde erişmelerine yardımcı olarak belirli içerik türlerini kullanıcılara sunar.

Uygulama kısayolları ile sabitlenmiş kısayollar arasındaki kontrastı gösteren resim
Şekil 1. Uygulama kısayolları ve sabitlenmiş kısayollar.

Kısayollarla içerik sunma şekliniz, kullanım alanınıza ve kısayolun bağlamının uygulama odaklı mı yoksa kullanıcı odaklı mı olduğuna bağlıdır. Statik bir kısayolun bağlamı değişmese ve dinamik kısayolun bağlamı sürekli değişse de uygulamanız her iki durumda da bağlamı yönlendirir. Kullanıcıların, sabitlenmiş bir kısayol kullanma gibi yöntemlerle uygulamanızın kendilerine nasıl içerik sunacağını seçtiği durumlarda, bağlam kullanıcı tarafından tanımlanır. Aşağıdaki senaryolarda, her kısayol türü için birkaç kullanım alanı açıklanmaktadır:

  • Statik kısayollar , kullanıcının uygulamayla etkileşim kurduğu süre boyunca tutarlı bir yapı kullanan içeriklere bağlantı veren uygulamalar için en iyi seçenektir. Çoğu başlatıcı aynı anda yalnızca dört kısayol gösterdiğinden, statik kısayollar rutin bir görevi tutarlı şekilde gerçekleştirmek (örneğin, kullanıcı, takvimini veya e-postasını belirli bir şekilde görüntülemek istediğinde) yararlıdır .
  • Dinamik kısayollar, bağlama duyarlı uygulamalardaki işlemler için kullanılır. Bağlama duyarlı kısayollar, kullanıcıların uygulamada gerçekleştirdiği işlemlere göre özelleştirilir. Örneğin, kullanıcının başlatma sırasında mevcut seviyesinden başlamasına olanak tanıyan bir oyun derlerseniz kısayolu sık sık güncellemeniz gerekir. Dinamik kısayol kullanmak, kullanıcı bir seviyeyi her temizlediğinde kısayolu güncellemenize olanak tanır.
  • Sabitlenmiş kısayollar kullanıcı odaklı belirli işlemler için kullanılır. Örneğin, bir kullanıcı başlatıcıya belirli bir web sitesini sabitlemek isteyebilir. Bu, kullanıcının özel bir işlem (ör. web sitesine tek bir adımda gitme) varsayılan bir tarayıcı örneğini kullanmaktan daha hızlı şekilde gerçekleştirmesine olanak sağladığı için yararlıdır.

Statik kısayollar oluşturma

Statik kısayollar, uygulamanızdaki genel işlemlere bağlantılar sağlar ve bu işlemler, uygulamanızın mevcut sürümünün kullanım ömrü boyunca tutarlı olmalıdır. Statik kısayollar için iyi seçenekler arasında gönderilen iletileri görüntüleme, bir alarm ayarlama ve kullanıcının o günkü egzersiz etkinliğini görüntüleme yer alır.

Statik kısayol oluşturmak için aşağıdakileri yapın:

  1. Uygulamanızın AndroidManifest.xml dosyasında, intent filtreleri android.intent.action.MAIN işlemine ve android.intent.category.LAUNCHER kategorisine ayarlanmış etkinliği bulun.

  2. Bu etkinliğe, uygulama kısayollarının tanımlandığı kaynak dosyasına başvuran bir <meta-data> öğesi ekleyin:

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.example.myapplication">
        <application ... >
          <activity android:name="Main">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            <meta-data android:name="android.app.shortcuts"
                       android:resource="@xml/shortcuts" /> 
          </activity>
        </application>
      </manifest>
      
  3. res/xml/shortcuts.xml adlı yeni bir kaynak dosyası oluşturun.

  4. Yeni kaynak dosyasına, <shortcut> öğelerinin listesini içeren bir <shortcuts> kök öğesi ekleyin. Her <shortcut> öğesine, statik kısayolla ilgili bilgiler (ör. simge, açıklama etiketleri ve uygulama içinde başlattığı amaçlar) ekleyin:

      <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
        <shortcut
          android:shortcutId="compose"
          android:enabled="true"
          android:icon="@drawable/compose_icon"
          android:shortcutShortLabel="@string/compose_shortcut_short_label1"
          android:shortcutLongLabel="@string/compose_shortcut_long_label1"
          android:shortcutDisabledMessage="@string/compose_disabled_message1">
          <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.myapplication"
            android:targetClass="com.example.myapplication.ComposeActivity" />
          <!-- If your shortcut is associated with multiple intents, include them
               here. The last intent in the list determines what the user sees when
               they launch this shortcut. -->
          <categories android:name="android.shortcut.conversation" />
          <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
        </shortcut>
        <!-- Specify more shortcuts here. -->
      </shortcuts>
      

Özellik değerlerini özelleştirin

Aşağıdaki listede, statik bir kısayol içindeki farklı özelliklerin açıklamaları yer almaktadır. android:shortcutId ve android:shortcutShortLabel için bir değer girin. Diğer tüm değerler isteğe bağlıdır.

android:shortcutId

Bir ShortcutManager nesnesi üzerinde işlem gerçekleştirdiğinde kısayolu temsil eden dize sabit değeri.

android:shortcutShortLabel

Kısayolun amacını açıklayan kısa ve öz bir ifade. Mümkün olduğunda bu kısa açıklamayı 10 karakterle sınırlandırın.

Daha fazla bilgi için setShortLabel() inceleyin.

android:shortcutLongLabel

Kısayolun amacını açıklayan genişletilmiş ifade. Yeterli alan varsa başlatıcı, android:shortcutShortLabel yerine bu değeri gösterir. Mümkün olduğunda bu uzun açıklamayı 25 karakterle sınırlandırın.

Daha fazla bilgi için setLongLabel() inceleyin.

android:shortcutDisabledMessage

Kullanıcı, devre dışı bırakılmış bir kısayolu başlatmaya çalıştığında desteklenen başlatıcıda görünen mesaj. Mesaj, kullanıcıya kısayolun neden devre dışı bırakıldığını açıklamalıdır. android:enabled, true ise bu özelliğin değerinin hiçbir etkisi yoktur.

android:enabled

Kullanıcının desteklenen bir başlatıcıdan kısayolla etkileşimde bulunup bulunamayacağını belirler. Varsayılan android:enabled değeri true'dir. Seçeneği false olarak ayarladıysanız kısayolu neden devre dışı bıraktığınızı açıklayan bir android:shortcutDisabledMessage belirleyin. Böyle bir mesaj sağlamanız gerekmediğini düşünüyorsanız kısayolu XML dosyasından tamamen kaldırın.

android:icon

Başlatıcının kısayolu kullanıcıya gösterirken kullandığı bit eşlem veya uyarlanabilir simge. Bu değer, bir görüntünün yolu veya görüntüyü içeren kaynak dosyası olabilir. Performansı ve tutarlılığı artırmak için mümkün olduğunda uyarlanabilir simgeleri kullanın.

İç öğeleri yapılandırma

Bir uygulamanın statik kısayollarını listeleyen XML dosyası, her bir <shortcut> öğesinde aşağıdaki öğeleri destekler. Tanımladığınız her statik kısayol için bir intent iç öğesi eklemeniz gerekir.

intent

Kullanıcı kısayolu seçtiğinde sistemin başlattığı işlem. Bu amaç, android:action özelliği için bir değer sağlamalıdır.

Tek bir kısayol için birden fazla amaç sağlayabilirsiniz. Ayrıntılar için Birden çok amacı ve etkinliği yönetme, Amaç belirleme ve TaskStackBuilder sınıfı referansına bakın.

categories

Uygulamanızın kısayollarının gerçekleştirdiği işlem türleri (ör. yeni sohbet mesajları oluşturma) için bir gruplandırma sağlar.

Desteklenen kısayol kategorilerinin listesi için ShortcutInfo sınıf referansına bakın.

capability-binding

Kısayolla bağlantılı özelliği tanımlar.

Yukarıdaki örnekte kısayol, Uygulama İşlemleri yerleşik amacı olan CREATE_MESSAGE için bildirilen bir özelliğe bağlıdır. Bu özellik bağlama, kullanıcıların kısayol çağırmak için Google Asistan ile sesli komutları kullanmalarına olanak tanır.

Dinamik kısayollar oluşturma

Dinamik kısayollar, uygulamanızdaki belirli, bağlama duyarlı işlemlere bağlantılar sağlar. Bu işlemler, uygulamanızın kullanımı ile uygulamanızın çalıştığı süre arasında farklılık gösterebilir. Dinamik kısayolların iyi kullanım alanları arasında belirli bir kişiyi aramak, belirli bir konuma gitmek ve kullanıcının son kaydetme noktasından bir oyun yüklemek yer alır. Bir ileti dizisini açmak için dinamik kısayolları da kullanabilirsiniz.

ShortcutManagerCompatJetpack kitaplığı, uygulamanızdaki dinamik kısayolları yönetmenizi sağlayan ShortcutManager API'nin yardımcısıdır. ShortcutManagerCompat kitaplığını kullanmak standart kodları azaltır ve kısayollarınızın Android sürümlerinde tutarlı bir şekilde çalışmasını sağlar. Bu kitaplık, Google Kısayollar Entegrasyonu Kitaplığı ile Asistan gibi Google yüzeylerinde görünebilmelerini sağlayacak dinamik kısayolları aktarmak için de gereklidir.

ShortcutManagerCompat API, uygulamanızın dinamik kısayollarla aşağıdaki işlemleri gerçekleştirmesini sağlar:

  • Aktar ve güncelle: Dinamik kısayollarınızı yayınlamak ve güncellemek için pushDynamicShortcut() kullanın. Aynı kimliğe sahip dinamik veya sabitlenmiş kısayollar varsa her değişken kısayol güncellenir.
  • Kaldır: removeDynamicShortcuts() kullanarak bir dinamik kısayol grubunu kaldırın. removeAllDynamicShortcuts() kullanan tüm dinamik kısayolları kaldırın.

Kısayollarda işlem gerçekleştirme hakkında daha fazla bilgi için Kısayolları yönetme bölümüne ve ShortcutManagerCompat referansına göz atın.

Aşağıda, dinamik kısayol oluşturmaya ve bunu uygulamanızla ilişkilendirmeye ilişkin bir örnek verilmiştir:

Kotlin


val shortcut = ShortcutInfoCompat.Builder(context, "id1")
        .setShortLabel("Website")
        .setLongLabel("Open the website")
        .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
        .setIntent(Intent(Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")))
        .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

Java


ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(context, "id1")
    .setShortLabel("Website")
    .setLongLabel("Open the website")
    .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
    .setIntent(new Intent(Intent.ACTION_VIEW,
                   Uri.parse("https://www.mysite.example.com/")))
    .build();

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut);

Google Kısayolları Entegrasyon Kitaplığı'nı ekleyin

Google Kısayolları Entegrasyonu Kitaplığı isteğe bağlı bir Jetpack kitaplığıdır. Bu özellik, başlatıcı gibi Android yüzeylerinde ve Asistan gibi Google yüzeylerinde görüntülenebilecek dinamik kısayollara ulaşmanıza olanak tanır. Bu kitaplığın kullanılması, kullanıcıların uygulamanızda belirli içeriklere hızlıca erişmek veya işlemleri tekrar oynatmak için kullanabileceğiniz kısayolları keşfetmelerine yardımcı olur.

Örneğin, bir mesajlaşma uygulaması, bir kullanıcı bir kişiye mesaj attıktan sonra "Ali" adlı kişi için dinamik kısayol gönderebilir. Dinamik kısayol aktarıldıktan sonra kullanıcı Asistan'a "Ok Google, ÖrnekUygulama'da Ali'ye mesaj gönder" diye sorarsa Asistan, ExampleApp'i başlatabilir ve bunu otomatik olarak Ali'ye mesaj gönderecek şekilde yapılandırabilir.

Bu kitaplıkla aktarılan dinamik kısayollar, cihaz başına uygulanan kısayol sınırlarına tabi değildir. Bu, bir kullanıcı ilişkili bir işlemi her tamamladığında uygulamanızın bir kısayola itmesini sağlar. Sık kullanılan kısayolları bu şekilde aktarmak Google'ın, kullanıcınızın kullanım kalıplarını anlamasını ve ona bağlamsal olarak alakalı kısayollar önermesini sağlar.

Örneğin Asistan, kullanıcının genellikle her sabah çalıştırdığı, fitness izleme uygulamanızdan aktarılan kısayollardan öğrenebilir ve kullanıcı sabah telefonunu eline aldığında proaktif olarak bir "koşu başlat" kısayolu önerebilir.

Google Kısayolları Entegrasyon Kitaplığı'nın kendisi herhangi bir adreslenebilir işlev sunmaz. Bu kitaplığı uygulamanıza ekleyerek Google yüzeyleri, uygulamanızın ShortcutManagerCompat ile gönderdiği kısayolları alabilir.

Bu kitaplığı uygulamanızda kullanmak için aşağıdaki adımları uygulayın:

  1. gradle.properties dosyanızı, AndroidX kitaplıklarını destekleyecek şekilde güncelleyin:

          
          android.useAndroidX=true
          # Automatically convert third-party libraries to use AndroidX
          android.enableJetifier=true
          
          
  2. app/build.gradle ürününde, Google Kısayollar Entegrasyon Kitaplığı ve ShortcutManagerCompat için bağımlılıklar ekleyin:

          
          dependencies {
            implementation "androidx.core:core:1.6.0"
            implementation 'androidx.core:core-google-shortcuts:1.0.0'
            ...
          }
          
          

Android projenize eklenen kitaplık bağımlılıkları ile uygulamanız, başlatıcıda ve katılımcı Google yüzeylerinde gösterilmeye uygun dinamik kısayollar aktarmak için ShortcutManagerCompat alanındaki pushDynamicShortcut() yöntemini kullanabilir.

Sabitlenmiş kısayollar oluştur

Android 8.0 (API düzeyi 26) ve sonraki sürümlerde sabitlenmiş kısayollar oluşturabilirsiniz. Statik ve dinamik kısayolların aksine, sabitlenen kısayollar, desteklenen başlatıcılarda ayrı simgeler olarak görünür. Şekil 1'de, bu iki kısayol türü arasındaki fark gösterilmektedir.

Uygulamanızı kullanarak desteklenen bir başlatıcıya kısayol sabitlemek için aşağıdaki adımları tamamlayın:

  1. Cihazın varsayılan başlatıcısının uygulama içi kısayolları sabitlemeyi desteklediğini doğrulamak için isRequestPinShortcutSupported() uygulamasını kullanın.
  2. Kısayolun mevcut olup olmamasına bağlı olarak şu iki yöntemden birini kullanarak bir ShortcutInfo nesnesi oluşturun:

    1. Kısayol varsa yalnızca mevcut kısayolun kimliğini içeren bir ShortcutInfo nesnesi oluşturun. Sistem kısayolla ilgili diğer tüm bilgileri otomatik olarak bulup sabitler.
    2. Yeni bir kısayolu sabitliyorsanız yeni kısayol için kimlik, amaç ve kısa etiket içeren bir ShortcutInfo nesnesi oluşturun.
  3. requestPinShortcut() yöntemini çağırarak kısayolu cihaz başlatıcıya sabitleyin. Bu işlem sırasında, uygulamanıza yalnızca kısayol başarıyla sabitlendiğinde bildirim gönderen bir PendingIntent nesnesi aktarabilirsiniz.

    Uygulamanız, bir kısayol sabitlendikten sonra içeriğini updateShortcuts() yöntemini kullanarak güncelleyebilir. Daha fazla bilgi için Kısayolları güncelleme konusunu okuyun.

Aşağıdaki kod snippet'inde, sabitlenmiş kısayolun nasıl oluşturulacağı gösterilmektedir.

Kotlin

val shortcutManager = getSystemService(ShortcutManager::class.java)

if (shortcutManager!!.isRequestPinShortcutSupported) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfo.Builder(context, "my-shortcut").build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0)

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.intentSender)
}

Java

ShortcutManager shortcutManager =
        context.getSystemService(ShortcutManager.class);

if (shortcutManager.isRequestPinShortcutSupported()) {
    // Enable the existing shortcut with the ID "my-shortcut".
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "my-shortcut").build();

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    Intent pinnedShortcutCallbackIntent =
            shortcutManager.createShortcutResultIntent(pinShortcutInfo);

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    PendingIntent successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0);

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.getIntentSender());
}

Özel kısayol etkinliği oluşturma

&#39;Gmail başlatıcı simgesini ana ekranınıza eklemek istiyor musunuz?&#39; istemini gösteren özel iletişim kutusu etkinliğini gösteren resim Özel seçenekler &quot;Hayır, teşekkürler&quot; ve &quot;Simge ekle&quot;dir.
Şekil 2. Özel uygulama kısayolu iletişim kutusu etkinliği örneği.

Ayrıca, kullanıcıların özel seçenekler ve onay düğmesiyle tamamlanan kısayollar oluşturmasına yardımcı olan özel bir etkinlik de oluşturabilirsiniz. Şekil 2'de Gmail uygulamasındaki bu tür bir etkinlik örneği gösterilmektedir.

Uygulamanızın manifest dosyasında etkinliğin <intent-filter> öğesine ACTION_CREATE_SHORTCUT ifadesini ekleyin. Bu bildirim, kullanıcı bir kısayol oluşturmaya çalıştığında aşağıdaki davranışı oluşturur:

  1. Sistem, uygulamanızın özel etkinliğini başlatır.
  2. Kullanıcı, kısayol seçeneklerini ayarlar.
  3. Kullanıcı, onay düğmesini seçer.
  4. Uygulamanız, createShortcutResultIntent() yöntemini kullanarak kısayolu oluşturur. Bu yöntem, uygulamanızın setResult() kullanarak önceden yürütülen etkinliğe geri gönderdiği bir Intent döndürür.
  5. Uygulamanız, özelleştirilmiş kısayolu oluşturmak için kullanılan etkinlikte finish() çağırıyor.

Benzer şekilde, kullanıcılar yüklemeden sonra veya uygulama ilk kez başlatıldığında ana ekrana sabitlenmiş kısayollar eklemesini isteyebilir. Bu yöntem, kullanıcılarınızın sıradan iş akışlarının bir parçası olarak kısayol oluşturmasına yardımcı olduğu için etkilidir.

Test kısayolları

Uygulamanızın kısayollarını test etmek için uygulamanızı, kısayolları destekleyen başlatıcı bulunan bir cihaza yükleyin. Ardından, aşağıdaki işlemleri gerçekleştirin:

  • Uygulamanız için tanımladığınız kısayolları görüntülemek üzere uygulamanızın başlatıcı simgesine dokunun ve basılı tutun.
  • Cihazın başlatıcısına sabitlemek istediğiniz kısayolu sürükleyin.