
Diğer uygulama kullanıcılarının URL'leri, resimleri veya diğer veri türlerini uygulamanızla paylaşmasını kolaylaştırmak ve hızlandırmak için Doğrudan Paylaşım hedeflerini kullanın. Doğrudan Paylaşım, kullanıcıların uygulamayı seçip kişiyi aramak zorunda kalmadan mesajlaşma ve sosyal medya uygulamalarındaki kişileri doğrudan Android Paylaşım Sayfası'nda sunarak çalışır.
ShortcutManagerCompat
paylaşım kısayolları sağlayan bir AndroidX API'sidir.
kullanımdan kaldırılan ChooserTargetService
API ile uyumludur. Bu, tercih edilen
hem de ChooserTargets
öğesini yayınlamanın bir yoludur. Talimatlar için
Hem Paylaşım Kısayolları hem deChooserTarget hedefleri sağlamak için AndroidX'i kullanma adlı makaleyi inceleyin.
bu sayfada yer alır.
Doğrudan Paylaşım hedeflerini yayınlama
Sharesheet Doğrudan Paylaşım satırı yalnızca Kısayollar API'si paylaşılıyor. Doğrudan Paylaşım'ı yayınlamak için aşağıdaki adımları tamamlayın belirler.
Uygulamanızın XML kaynak dosyasında
share-target
öğeleri tanımlayın.<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Uygulamanız ilk kullanıma hazırlandığında
setDynamicShortcuts
kullanın. dinamik kısayolları önem derecesine göre sıralayabilirsiniz.Düşük bir endeks, daha yüksek önemi gösterir. Etkili bir ekiple kısa ve öz konuşmalara göre sıralanmış olarak en iyi şekilde yararlanabilirsiniz. Eski kısayolları yayınlamayın; bir görüşmede son 30 gün içindeki kullanıcı etkinliği eski olarak kabul edilir.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Bir iletişim uygulaması geliştiriyorsanız kısayol kullanımını Kullanıcı her seferinde
pushDynamicShortcut
hemen kişi bir ileti alır veya kişiye gönderir. Şunun için kısayol kullanımını bildirme konusuna bakın: iletişim uygulamalarına giderek daha fazla bilgi edinebilirsiniz. Örneğin,actions.intent.SEND_MESSAGE
özelliğiyleShortcutInfoCompat.Builder#addCapabilityBinding
aracılığıyla kısayolda özellik bağlamalarını belirterek kullanıcı tarafından gönderilen mesajların kullanımını raporlayın.Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Kullanıcı bir kişiyi silerse
removeLongLivedShortcut
. Bu, tercih edilen sistem tarafından önbelleğe alınmış olup olmamasına bakılmaksızın kısayolu kaldırmanın kullanıma sunuyoruz. Aşağıdaki kod snippet'inde bunun nasıl yapılacağına dair bir örnek gösterilmektedir.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Doğrudan Paylaşım hedeflerinizin sıralamasını iyileştirin
Android paylaşım sayfasında sabit sayıda doğrudan paylaşım hedefi gösterilir. Bu öneriler sıralamaya göre sıralanır. Aşağıdakileri yaparak kısayollarınızın sıralamasını iyileştirebilirsiniz:
- Tüm
shortcutIds
değerlerinin benzersiz olduğundan ve farklı hedefler için asla yeniden kullanılmadığından emin olun. - Şu numarayı arayarak kısayolun uzun ömürlü olduğundan emin olun:
setLongLived(true)
. - İleti dizisiyle ilgili kısayollar için
ShortcutManagerCompat.pushDynamicShortcut
aracılığıyla ilgili kısayolları yeniden yayınlayarak giden ve gelen iletilerde kısayol kullanımını bildirin. Ayrıntılar için bu sayfadaki İletişim uygulamaları için kısayol kullanımını bildirme bölümüne bakın. - Alakasız veya eski doğrudan paylaşım hedefleri (ör. kullanıcının son 30 gün içinde mesajlaşmadığı kişiler) sağlamamaya çalışın.
- SMS uygulamalarında, kısa kodlara veya görüşmelere kısayol sunmaktan kaçının. potansiyel spam olarak tanımlanmıştır. Kullanıcıların kendileriyle paylaşımda bulunma olasılığı çok düşüktür yardımcı olan ekip çalışmasıdır.
- Kısayolu uygun
mimeType
özelliklerine ilişkilendirmek içinsetCategories()
işlevini çağırın. Örneğin, bir SMS uygulamasında kişi RCS veya MMS'yi etkinleştirmemişse ilgili kısayoluimage/*
vevideo/*
gibi metin dışı MIME türleriyle ilişkilendirmezsiniz. - Belirli bir görüşmede dinamik bir kısayol gönderildikten ve kullanım raporlandıktan sonra kısayol kimliğini değiştirmeyin. Bu sayede, sıralama için kullanım verilerinin saklanması sağlanır.
Kullanıcı herhangi bir Doğrudan Paylaşım hedefine dokunursa uygulamanız kullanıcıyı doğrudan hedefin konusuyla ilgili işlem yapabileceği bir kullanıcı arayüzüne yönlendirmelidir. Kullanıcıya anlam ayrımı yapan bir kullanıcı arayüzü göstermeyin ve kullanıcıyı, dokunulan hedefle alakalı olmayan bir kullanıcı arayüzüne yerleştirmeyin. Örneğin, bir mesajlaşma uygulamasında doğrudan paylaşıma dokunduğunuzda hedef, kullanıcıyı seçtiği kişiyle görüşme görünümüne yönlendirir. İlgili içeriği oluşturmak için kullanılan klavye görünür durumda ve mesaj, paylaşılan verilerle önceden doldurulmuştur.
Paylaşım Kısayolları API'sı
Android 10 (API düzeyi 29) sürümünden itibaren
ShortcutInfo.Builder
yöntemler ve geliştirmeler ekledi
paylaşma hedefi hakkında ek bilgi sağlayan:
setCategories()
- Android 10'dan itibaren kategoriler, şu kısayolları filtrelemek için de kullanılır: paylaşım amaçlarını ve işlemlerini işleyebilir. Bkz. Paylaşım bildirme hedef'i seçin. Bu alan kısayollar için gereklidir bu modellerin paylaşım hedefi olarak kullanılması amaçlanmıştır.
setLongLived()
Bir kısayolun yayınlanmamış veya uygulama tarafından görünmez hale getirilmiş (dinamik ya da sabitlenmiş kısayol olarak) durumda geçerli olup olmadığını belirtir. Uzun ömürlü bir kısayol, dinamik kısayol olarak yayınlandıktan sonra bile çeşitli sistem hizmetleri tarafından önbelleğe alınabilir.
Bir kısayolun uzun ömürlü olması, sıralamasını iyileştirebilir. Ayrıntılar için En iyi sıralamayı elde etme başlıklı makaleyi inceleyin.
setShortLabel()
,setLongLabel()
Bir kişinin kısayolunu yayınlarken lütfen
setLongLabel()
alanına tam adını,setShortLabel()
alanına ise takma ad veya ad gibi kısa bir adı ekleyin.
Paylaşım kısayollarını GitHub'da yayınlama örneğine göz atın.
Kısayol görüntüleri sağlama
Paylaşım kısayolu oluşturmak için setIcon()
aracılığıyla bir resim eklemeniz gerekir.
Paylaşım kısayolları sistem yüzeylerinde görünebilir ve yeniden şekillendirilebilir.
Ayrıca, Android 7, 8 veya 9 (API düzeyleri 25,
26, 27 ve 28) yalnızca bit eşlem simgeleri arka plan olmadan görüntüleyebilir. Bu da
kontrastı önemli ölçüde azaltır. Kısayolunuzun istediğiniz gibi göründüğünden emin olmak için
IconCompat.createWithAdaptiveBitmap()
kullanarak uyarlanabilir bit eşlem sağlayabilirsiniz.
Uyarlanabilir bitmap'lerin uyarlanabilir simgeler için belirlenen yönergelere ve boyutlara uyduğundan emin olun. Bunu yapmanın en yaygın yolu, istenen kare bitmap'i 72x72 dp'ye ölçeklendirmek ve 108x108 dp şeffaf bir kanvasta ortalanmasıdır. Simgeniz şeffaf bölgeler içeriyorsa arka plan rengi eklemeniz gerekir. Aksi takdirde şeffaf bölgeler siyah görünür.
Belirli bir şekle maskelenmiş görüntüler göndermeyin. Örneğin, Android 10 (API düzeyi 29) öncesinde, Doğrudan Paylaşım ChooserTarget
'ları için daire şeklinde maskelenmiş kullanıcı avatarları sağlamak yaygındı. Android Sharesheet ve diğer
sistem yüzeyleri artık şekil ve tema kısayollarını kullanıyor.
Paylaşım kısayolları sağlamak için tercih edilen yöntem, ShortcutManagerCompat
aracılığıyla, geriye dönük uyumlu Doğrudan Paylaş ChooserTarget
nesnelerini sizin için otomatik olarak daireler şeklinde biçimlendirmektir.
Paylaşım hedefi belirtme
Paylaşım hedefleri, statik kısayol tanımlarına benzer şekilde uygulamanın kaynak dosyasında tanımlanmalıdır. Diğer statik kısayol tanımlarıyla birlikte, kaynak dosyasındaki <shortcuts>
kök öğesine paylaşım hedefi tanımları ekleyin. Her bir <share-targets>
öğesi
Paylaşılan veri türü, eşleşen kategoriler ve
hedef sınıfını tanımlayın. XML kodu yalnızca
aşağıdaki gibidir:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Paylaşım hedefindeki veri öğesi, amaç filtresindeki veri spesifikasyonuna benzer. Her paylaşım hedefinde yalnızca bir uygulamanın yayınlanan kısayollarıyla eşleştirmek için kullanılan birden fazla kategori kendi paylaşım hedefi tanımlarını göz önünde bulundurun. Kategoriler, uygulama tarafından tanımlanan herhangi bir değere sahip olabilir.
Kullanıcı, Android paylaşım sayfasında yukarıdaki hedef paylaşım örneğiyle eşleşen paylaşım kısayolunu seçerse uygulamaya aşağıdaki paylaşım amacı gönderilir:
Action: Intent.ACTION_SEND ComponentName: {com.example.android.sharingshortcuts / com.example.android.sharingshortcuts.SendMessageActivity} Data: Uri to the shared content EXTRA_SHORTCUT_ID: <ID of the selected shortcut>
Kullanıcı, başlatıcı kısayollarından paylaşım hedefini açarsa uygulama, paylaşım kısayolu ShortcutManagerCompat'e eklenirken oluşturulan intent'i alır.
Farklı bir intent olduğu için Intent.EXTRA_SHORTCUT_ID
kullanılamaz ve ihtiyacınız varsa kimliği manuel olarak iletmeniz gerekir.
İletişim uygulamaları için kısayol kullanımını bildirme
İletişim uygulaması geliştiriyorsanız hem giden hem de gelen mesajların kullanımını bildirerek Android Paylaş Sayfası'ndaki sıralamanızı yükseltebilirsiniz.
Bunu yapmak için, ilgili kişiyi temsil eden görüşme kısayolunu
ShortcutManagerCompat.pushDynamicShortcut
.
Kısayol kullanımı ve özellik bağlamaları, Android 5.0 ile geriye dönük uyumludur. (API 21).
Giden iletiler için kısayol kullanımını bildirme
Kullanıcı tarafından gönderilen iletilerin raporlama kullanımı, işlevsel olarak "gönder" düğmesini tıklayarak düğmesini tıklayın.
Kullanım raporlamasını tetiklemek için kısayolda özellik bağlamalarını belirtin
ShortcutInfoCompat.Builder#addCapabilityBinding
tarihine kadar
actions.intent.SEND_MESSAGE
özelliği var.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Giden mesaj bir grup sohbet içinse recipient
türü özellikle ilişkili olduğundan Audience
parametre değerini de eklemeniz gerekir.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Gelen iletiler için kısayol kullanımını raporla
Kullanıcı SMS, sohbet mesajı, e-posta veya bildirim gibi bir mesaj aldığında kullanım raporlamasını tetiklemek için actions.intent.RECEIVE_MESSAGE
özelliğiyle ShortcutInfoCompat.Builder#addCapabilityBinding
aracılığıyla kısayolda ek olarak özellik bağlamaları belirtmeniz gerekir.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Gelen mesaj bir grup sohbetinden geliyorsa Audience
özelliğini de eklemeniz gerekir
sender
türü için parametre değeri
beceriyle ilişkilidir.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Hem Paylaşım Kısayolları hem de ChooserTargets sağlamak için AndroidX'i kullanma
AndroidX uyumluluk kitaplığıyla çalışabilmek için uygulamanın manifest dosyasında meta veri seçici-hedef-hizmet ve intent filtreleri grubu bulunmalıdır. Görüntüleyin
mevcut ChooserTargetService
Doğrudan Paylaşım API'si.
Bu hizmet, uyumluluk kitaplığında zaten beyan edildiği için kullanıcının hizmeti uygulamanın manifest dosyasında beyan etmesi gerekmez. Ancak, paylaşım etkinliğinden hizmete giden bağlantı, seçici hedef sağlayıcı olarak dikkate alınmalıdır.
Aşağıdaki örnekte, ChooserTargetService
için AndroidX'te tanımlanmış androidx.core.content.pm.ChooserTargetServiceCompat
uygulaması kullanılmıştır:
<activity android:name=".SendMessageActivity" android:label="@string/app_name" android:theme="@style/SharingShortcutsDialogTheme"> <!-- This activity can respond to Intents of type SEND --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <!-- Only needed if you import the sharetarget AndroidX library that provides backwards compatibility with the old DirectShare API. The activity that receives the Sharing Shortcut intent needs to be taken into account with this chooser target provider. --> <meta-data android:name="android.service.chooser.chooser_target_service" android:value="androidx.sharetarget.ChooserTargetServiceCompat" /> </activity>
Kısayolları paylaşmayla ilgili SSS
Kısayol kullanım verileri nasıl saklanıyor ve cihazdan ayrılıyor?
Kısayollar tamamen cihaz üzerinde, sistem verileri dizininde bir şifrelenmiş disk bölümü Kısayollardaki bilgiler (ör. simge, amaç, kişiler ve kaynakların isimlerine ve isimlerine yalnızca sistem hizmetleri ve aynı uygulama tarafından da yürütülür.
Doğrudan Paylaşım'ın geçmişi nedir?
Android 6.0'da (API düzeyi 23) Doğrudan Paylaşım'ı kullanıma sunarak uygulamaların,
ChooserTargetService
aracılığıyla ChooserTarget
nesne sağlayın. Sonuçlar (önceki değeri)
Bu durum, hedeflerin daha uzun sürede yüklenebilmesine neden oluyor.
Android 10'da (API düzeyi 29) ChooserTargetService
Doğrudan Paylaşım API'lerini yeni Paylaşım Kısayolları API'siyle değiştirdik. Paylaşım Kısayolları API'si, sonuçları istek üzerine reaktif olarak almak yerine uygulamaların Doğrudan Paylaşım hedeflerini önceden yayınlamasına olanak tanır. Bu sayede, Paylaşım E-Tablosu hazırlanırken Doğrudan Paylaşım hedeflerinin alınması işlemi hızlandı. ChooserTargetService
Doğrudan Paylaşım mekanizması çalışmaya devam edecek ancak sistem, bu şekilde sağlanan hedefleri Paylaşım Kısayolları API'sini kullanan hedeflerden daha düşük bir sıralamaya yerleştirir.
Android 11 (API düzeyi 30) ile ChooserTargetService
hizmetinin desteği sonlandırıldı ve Doğrudan Paylaşım hedeflerini sağlamanın tek yolu Paylaşım Kısayolları API'sidir.
Paylaşım hedefleri için yayınlanan kısayolların başlatıcıdan farkı nedir? kısayollar (Chrome'da uygulama simgelerine uzun süre basıldığında kullanılan tipik kısayolların kullanımı) başlatıcı)?
"Hedefi paylaş" amacıyla yayınlanan tüm kısayollar, başlatıcı kısayoludur ve uygulamanızın simgesine uzun bastığınızda menüde gösterilir. İlgili içeriği oluşturmak için kullanılan etkinlik başına maksimum kısayol sayısı sınırı, toplam bir uygulamanın yayınladığı kısayollar (paylaşma hedefleri ve eski başlatıcı kısayolları birlikte) sunulur.
Yayınlanması gereken paylaşım kısayollarının sayısıyla ilgili kurallar nelerdir?
Paylaşım kısayollarının sayısı, getMaxShortcutCountPerActivity(android.content.Context)
üzerinden kullanılabilen dinamik kısayolların sayısıyla sınırlıdır. Bu sınıra kadar dilediğiniz sayıda kısayol yayınlayabilirsiniz ancak paylaşım kısayollarının, uygulama başlatıcıda uzun basıldığında ve paylaşım sayfasında görünebileceğini unutmayın. Uzun basıldığında çoğu uygulama başlatıcıda dikey modda en fazla dört veya beş, yatay modda ise sekiz kısayol gösterilir. Kısayol paylaşma hakkında daha fazla bilgi ve yol gösterici bilgiler için bu SSS sayfasına bakın.