Kısayol oluşturma

Kısayollar, uygulamanızın bölümlerine hızlı bir şekilde erişmelerine yardımcı olarak kullanıcılarınıza belirli içerik türleri 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 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ı sağlar. Kullanıcının, uygulamanızın kendisine nasıl içerik sunacağını (ör. sabitlenmiş bir kısayolla) 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şiminin ömrü boyunca tutarlı bir yapı kullanarak içeriklere bağlantı veren uygulamalar için idealdir. Çoğu başlatıcı aynı anda yalnızca dört kısayol gösterdiğinden, statik kısayollar rutin bir görevi tutarlı bir şekilde gerçekleştirmek (örneğin, kullanıcı takvimini veya e-postasını belirli bir şekilde görüntülemek istediğinde) faydalı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 yaptığı işlemlere göre özelleştirilir. Örneğin, kullanıcının başlatma sırasında mevcut seviyesinden başlamasını sağlayan 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ı tabanlı belirli işlemler için kullanılır. Örneğin, bir kullanıcı belirli bir web sitesini başlatıcıya sabitlemek isteyebilir. Bu, kullanıcının özel bir işlem (ör. web sitesine tek adımda gitme) varsayılan bir tarayıcı örneğini kullanmaktan daha hızlı bir şekilde gerçekleştirmesini 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ı kalmalıdır. Statik kısayollar, gönderilen mesajları görüntülemek, bir alarm ayarlamak ve kullanıcının günlük egzersiz etkinliğini görüntülemektir.

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

  1. Uygulamanızın AndroidManifest.xml dosyasında, amaç 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 dosyaya 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, simgesi, açıklama etiketleri ve uygulama içinde başlattığı niyetler dahil olmak üzere statik bir kısayolla ilgili bilgiler 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ştirme

Aşağıdaki liste, statik bir kısayoldaki farklı özelliklerin açıklamalarını içerir. 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 bir dize değişmez 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() konusuna bakın.

android:shortcutLongLabel

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

Daha fazla bilgi için setLongLabel() konusuna bakın.

android:shortcutDisabledMessage

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

android:enabled

Kullanıcının desteklenen bir başlatıcıdan kısayolla etkileşimde bulunup bulunamayacağını belirler. android:enabled öğesinin varsayılan değeri true değeridir. 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, kullanıcıya kısayolu 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 simgeler kullanın.

İç öğeleri yapılandırın

Bir uygulamanın statik kısayollarını listeleyen XML dosyası, her <shortcut> öğesinin içinde 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 niyet, android:action özelliği için bir değer sağlamalıdır.

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

categories

Uygulamanızın kısayollarının gerçekleştirdiği yeni sohbet mesajları gibi işlem türleri 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.

Önceki ö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 bir kısayolu çağırmak için Google Asistan ile sesli komutları kullanması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 değişiklik gösterebilir. Dinamik kısayolların iyi kullanımları arasında belirli bir kişiyi çağırmak, belirli bir konuma gitmek ve kullanıcının son kayıt noktasından bir oyun yüklemek yer alır. Bir ileti dizisini açmak için dinamik kısayolları da kullanabilirsiniz.

ShortcutManagerCompat Jetpack kitaplığı, uygulamanızdaki dinamik kısayolları yönetmenizi sağlayan ShortcutManager API'nin yardımcısıdır. ShortcutManagerCompat kitaplığını kullanmak, standart kodu azaltır ve kısayollarınızın Android sürümlerinde tutarlı bir şekilde çalışmasını sağlar. Bu kitaplık, dinamik kısayolların Asistan gibi Google platformlarında Google Kısayollar Entegrasyon Kitaplığı ile gösterilmeye uygun olması amacıyla dinamik kısayolların aktarılması için de gereklidir.

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

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

Kısayollarla ilgili işlem gerçekleştirme hakkında daha fazla bilgi için Kısayolları yönetme ve ShortcutManagerCompat referansına göz atın.

Dinamik kısayol oluşturma ve bunu uygulamanızla ilişkilendirmeyle ilgili bir örneği burada bulabilirsiniz:

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. Başlatıcı gibi Android yüzeylerinde ve Asistan gibi Google yüzeylerinde görüntülenebilecek dinamik kısayolları kullanıma sunmanızı sağlar. Bu kitaplığın kullanılması, kullanıcıların uygulamanızda belirli içeriklere veya tekrar oynatma işlemlerine hızlıca erişmek için kullanabileceğiniz kısayolları keşfetmelerine yardımcı olur.

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

Bu kitaplıkla aktarılan dinamik kısayollar, cihaz başına uygulanan kısayol sınırlarına tabi değildir. Böylece, kullanıcılar uygulamanızda ilişkili bir işlemi her tamamladığında uygulamanız kısayol oluşturabilir. Sık kullanılan kısayolları bu şekilde aktarmak Google'ın, kullanıcılarınızın kullanım alışkanlıklarını anlamasına ve kullanıcıya bağlamsal olarak alakalı kısayollar önermesine olanak tanır.

Ö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 "koşu başlat" kısayolu önerebilir.

Google Kısayolları Entegrasyon Kitaplığı'nın kendisi adreslenebilir herhangi bir işlev sunmaz. Bu kitaplığı uygulamanıza eklediğinizde Google yüzeyleri, ShortcutManagerCompat kullanarak uygulamanızın yayınladığı kısayolları alabilir.

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

  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ık 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 isRequestPinShortcutSupported() kullanın.
  2. Kısayolun mevcut olup olmadığına bağlı olarak şu iki yöntemden birini kullanarak 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ısayol sabitliyorsanız yeni kısayol için kimlik, amaç ve kısa etiket içeren bir ShortcutInfo nesnesi oluşturun.
  3. requestPinShortcut() numaralı telefonu arayarak kısayolu cihaz başlatıcısına sabitleyin. Bu işlem sırasında, uygulamanızı yalnızca kısayol başarıyla sabitlendiğinde bilgilendiren bir PendingIntent nesnesi aktarabilirsiniz.

    Uygulamanız, 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ş bir 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; isteminin yer aldığı ö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.

Kullanıcıların, özel seçenekler ve bir 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 gösterilmektedir.

Uygulamanızın manifest dosyasında etkinliğin <intent-filter> öğesine ACTION_CREATE_SHORTCUT ekleyin. Bu bildirim, kullanıcı bir kısayol oluşturmayı denediğinde aşağıdaki davranışı ayarlar:

  1. Sistem, uygulamanızın özel etkinliğini başlatır.
  2. Kullanıcı kısayola ilişkin seçenekleri ayarlar.
  3. Kullanıcı onay düğmesini seçer.
  4. Uygulamanız, createShortcutResultIntent() yöntemini kullanarak kısayolu oluşturuyor. Bu yöntem Intent döndürür. Uygulamanız, setResult() kullanarak daha önce yürütülen etkinliğe geri geçiş yapar.
  5. Uygulamanız, özelleştirilmiş kısayolu oluşturmak için kullanılan etkinlikte finish() çağrısı yapıyor.

Benzer şekilde uygulamanız, kullanıcılardan 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 bir başlatıcıya sahip 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 dokunup basılı tutun.
  • Cihazın başlatıcısına sabitlemek için bir kısayolu sürükleyin.