Android, kullanıcıların en sevdikleri uygulamaları kullanarak hızlı ve kolay bir şekilde bilgi paylaşabilmeleri için amaçları ve bunlarla ilişkili ek özellikleri kullanır.
Android, kullanıcıların uygulamalar arasında veri paylaşması için iki yol sunar:
- Android Sharesheet, temel olarak uygulamanızın dışına ve/veya doğrudan başka bir kullanıcıya içerik göndermek için tasarlanmıştır. Örneğin, bir URL'yi bir arkadaşınızla paylaşabilirsiniz.
- Android amaç çözümleyici, verileri iyi tanımlanmış bir görevin sonraki aşamasına geçirmek için idealdir. Örneğin, uygulamanızdan bir PDF açıp kullanıcıların tercih ettikleri görüntüleyiciyi seçmelerine izin verebilirsiniz.
Bir niyet oluştururken amacın gerçekleştirmesini istediğiniz işlemi belirtirsiniz.
Android, bir etkinlikten diğerine, hatta işlem sınırlarını aşarak veri göndermek için ACTION_SEND
işlemini kullanır. Verileri ve türünü belirtmeniz
gerekir. Sistem, verileri alabilecek uyumlu etkinlikleri otomatik olarak belirler ve kullanıcıya gösterir. Niyet çözümleyicide, amacı yalnızca bir etkinlik işleyebiliyorsa bu etkinlik hemen başlar.
Android Sharesheet'i kullanma nedeni
Kullanıcılarınız için uygulamalar arasında tutarlılık sağlamak amacıyla Android Sharesheet'i kullanmanızı kesinlikle öneririz. Uygulamanızın kendi paylaşım hedefleri listesini göstermeyin veya kendi Sharesheet varyasyonlarınızı oluşturmayın.
Android Sharesheet, kullanıcıların tek bir dokunuşla ilgili uygulama önerilerini kullanarak bilgileri doğru kişilerle paylaşabilmelerini sağlar. Sharesheet, özel çözümler için kullanılamayan hedefler önerebilir ve tutarlı bir sıralama kullanır. Bunun nedeni, Sharesheet'in yalnızca sistemde kullanılabilen uygulama ve kullanıcı etkinliği hakkındaki bilgileri hesaba katabilmesidir.
Android Sharesheet'te geliştiriciler için pek çok kullanışlı özellik de bulunur. Örneğin, aşağıdakileri yapabilirsiniz:
- Kullanıcılarınız bir paylaşımı ne zaman ve nerede tamamladığını öğrenme
- Özel
ChooserTarget
ve uygulama hedefleri ekleme - Android 10'dan itibaren (API düzeyi 29) zengin metin içeriği önizlemeleri sağlama
- Belirli bileşen adlarıyla eşleşen hedefleri hariç tutma
Android Sharesheet'i kullanma
Tüm paylaşım türleri için bir amaç oluşturun ve işlemini Intent.ACTION_SEND
olarak ayarlayın.
Android Sharesheet'i görüntülemek için Intent
nesnenizi ileterek Intent.createChooser()
yöntemini çağırın.
Niyetinizin, her zaman Android Sharesheet'i görüntüleyen bir sürümünü döndürür.
Kısa mesaj içeriği gönderme
Android Sharesheet'in en basit ve yaygın kullanımı, bir etkinlikten diğerine metin içeriği göndermektir. Örneğin, çoğu tarayıcı görüntülenmekte olan sayfanın URL'sini başka bir uygulama ile metin olarak paylaşabilir. Bu özellik, bir makaleyi veya web sitesini e-posta ya da sosyal ağ üzerinden arkadaşlarınızla paylaşırken faydalıdır. Aşağıda, bunu nasıl yapacağınıza ilişkin bir örnek verilmiştir:
Kotlin
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } val shareIntent = Intent.createChooser(sendIntent, null) startActivity(shareIntent)
Java
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, null); startActivity(shareIntent);
İsteğe bağlı olarak, daha fazla bilgi eklemek için e-posta alıcıları (EXTRA_EMAIL
,
EXTRA_CC
,
EXTRA_BCC
),
e-posta konusu
(EXTRA_SUBJECT
) vb.
Not: Gmail gibi bazı e-posta uygulamaları, EXTRA_EMAIL
ve EXTRA_CC
gibi ek özellikler için String[]
uygulamasını bekler. Bunları amacınıza eklemek için putExtra(String, String[])
özelliğini kullanın.
İkili program içeriği gönderme
ACTION_SEND
işlemini kullanarak ikili program verilerini paylaşın.
Uygun MIME türünü ayarlayın ve aşağıdaki örnekte gösterildiği gibi ekstra EXTRA_STREAM
içindeki verilere bir URI yerleştirin.
Bu, genellikle resim paylaşmak için kullanılır, ancak herhangi bir türdeki ikili program içeriğini paylaşmak için de kullanılabilir.
Kotlin
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND // Example: content://com.google.android.apps.photos.contentprovider/... putExtra(Intent.EXTRA_STREAM, uriToImage) type = "image/jpeg" } startActivity(Intent.createChooser(shareIntent, null))
Java
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); // Example: content://com.google.android.apps.photos.contentprovider/... shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage); shareIntent.setType("image/jpeg"); startActivity(Intent.createChooser(shareIntent, null));
Alıcı uygulamanın, Uri
öğesinin yönlendirdiği verilere erişmek için izne ihtiyacı vardır. Bunu yapmak için önerilen iki yol vardır:
- Verileri kendi
ContentProvider
cihazınızda depolayın ve diğer uygulamaların sağlayıcınıza erişmek için doğru izne sahip olduğundan emin olun. Erişim sağlamak için tercih edilen mekanizma, geçici olan ve yalnızca alıcı uygulamaya erişim veren URI başına izinler kullanmaktır. Bunun gibi birContentProvider
oluşturmanın kolay bir yolu,FileProvider
yardımcı sınıfını kullanmaktır. MediaStore
sistemini kullanın.MediaStore
temel olarak video, ses ve resim MIME türleri içindir. Ancak, Android 3.0 (API düzeyi 11) sürümünden itibaren medya olmayan türleri de depolayabilir. Daha fazla bilgi içinMediaStore.Files
bölümünü inceleyin. DosyalarscanFile()
kullanılarakMediaStore
içine eklenebilir. Ardından, sağlananonScanCompleted()
geri çağırmaya paylaşıma uyguncontent://
stilinde birUri
aktarılır.MediaStore
sistemine eklendikten sonra içeriğe cihazdaki tüm uygulamaların erişilebildiğini unutmayın.
Doğru MIME türünü kullanma
Gönderdiğiniz veriler için kullanılabilir olan en belirgin MIME türünü sağlayın. Örneğin, düz metin paylaşırken text/plain
kullanın. Android'de basit veri gönderirken yaygın olarak kullanılan birkaç MIME türü aşağıda verilmiştir:
Alıcılar | Gönderenler, ileti |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Desteklenen dosya uzantıları | application/pdf |
MIME türleri hakkında daha fazla bilgi için MIME medya türlerinin resmi IANA kaydına bakın.
Android Sharesheet, sağlanan MIME türüne bağlı olarak bir içerik önizlemesi gösterebilir. Bazı önizleme özellikleri yalnızca belirli türler için kullanılabilir.
Birden çok içerik paylaşma
Birden çok içerik paylaşmak için ACTION_SEND_MULTIPLE
işlemini, içeriği işaret eden URI'ların listesiyle birlikte kullanın. MIME türü, paylaştığınız içeriğin
karışına göre değişir. Örneğin, üç JPEG resmi paylaşırsanız "image/jpg"
türünü kullanırsınız. Resim türlerinin bir karışımında, her tür resmi işleyen bir etkinliği eşleştirmek için "image/*"
kullanın. Çeşitli türlerde paylaşımlar yapmak mümkün olsa da, alıcı için neyin gönderilmesi
gerektiği açıkça anlaşılmadığından bunu kesinlikle önermiyoruz. Birden fazla tür göndermeniz gerekiyorsa "*/*"
kullanın. Verilerinizin ayrıştırılması ve işlenmesi alıcı uygulamaya bağlıdır. Aşağıda bununla ilgili bir örnek verilmiştir:
Kotlin
val imageUris: ArrayList<Uri> = arrayListOf( // Add your image URIs here imageUri1, imageUri2 ) val shareIntent = Intent().apply { action = Intent.ACTION_SEND_MULTIPLE putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris) type = "image/*" } startActivity(Intent.createChooser(shareIntent, null))
Java
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, null));
Sağlanan Uri
nesnelerinin, alıcı uygulamanın erişebileceği verileri işaret ettiğinden emin olun.
Metin önizlemelerine zengin içerik ekleme
Android Sharesheet, Android 10'dan (API düzeyi 29) başlayarak paylaşılan metnin bir önizlemesini gösterir. Bazı durumlarda, paylaşılan metnin anlaşılması zor olabilir. https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
gibi karmaşık bir URL'yi paylaşmayı düşünün. Daha zengin bir önizleme, kullanıcılarınıza nelerin paylaşıldığından emin olabilir.
Metni önizliyorsanız başlık, küçük resim veya her ikisini de ayarlayabilirsiniz. Intent.createChooser()
işlevini çağırmadan önce Intent.EXTRA_TITLE
öğesine bir açıklama ekleyin ve ClipData
ile ilgili küçük resmi de ekleyin.
Not: Resim içerik URI'si bir FileProvider
öğesinden sağlanır ve genellikle yapılandırılmış bir <cache-path>
kullanılır.
Daha fazla bilgi için Dosya paylaşma başlıklı makaleye bakın. Sharesheet'e küçük resim olarak kullanmak istediğiniz tüm resimleri
okumak üzere doğru izinleri verdiğinizden emin olun. Daha fazla bilgi için Intent.FLAG_GRANT_READ_URI_PERMISSION
inceleyin.
Aşağıda bununla ilgili bir örnek verilmiştir:
Kotlin
val share = Intent.createChooser(Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/") // (Optional) Here you're setting the title of the content putExtra(Intent.EXTRA_TITLE, "Introducing content previews") // (Optional) Here you're passing a content URI to an image to be displayed data = contentUri flags = Intent.FLAG_GRANT_READ_URI_PERMISSION }, null) startActivity(share)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/"); // (Optional) Here you're setting the title of the content sendIntent.putExtra(Intent.EXTRA_TITLE, "Introducing content previews"); // (Optional) Here you're passing a content URI to an image to be displayed sendIntent.setData(contentUri); sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Show the Sharesheet startActivity(Intent.createChooser(sendIntent, null));
Önizleme şuna benzer:
Paylaşım sayfasına özel işlemler ekleme
Uygulamalar, Android 14 (API Düzeyi 34) ve sonraki sürümlerde Android Sharesheet'e özel işlemler ekleyebilir.
Özel işlemler, Android Sharesheet'in üst kısmında küçük işlem simgeleri olarak gösterilir. Uygulamalar da simge tıklandığında çağrılan işlem olarak herhangi bir Intent
işlemini belirtebilir.
Android Sharesheet'te özel işlemler eklemek için önce ChooserAction.Builder
ile bir ChooserAction
oluşturun.
Simge tıklandığında çağrılan işlem olarak bir PendingIntent
belirtebilirsiniz. Tüm özel işlemlerinizi içeren bir dizi oluşturun ve bunu Intent
payının EXTRA_CHOOSER_CUSTOM_ACTIONS
değeri olarak belirtin.
Kotlin
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Özel hedefler ekleyin
Android Sharesheet, ChooserTargetServices
ürününden yüklenen paylaşım kısayolları ve seçici hedeflerinden önce gösterilecek en fazla iki ChooserTarget
nesnesi belirtmenize olanak tanır. Ayrıca, uygulama önerilerinden önce listelenen etkinliklere işaret eden en fazla iki amaç belirtebilirsiniz:
Intent.createChooser()
çağrısından sonra Intent.EXTRA_CHOOSER_TARGETS
ve Intent.EXTRA_INITIAL_INTENTS
öğelerini paylaşım amacınıza ekleyin:
Kotlin
val share = Intent.createChooser(myShareIntent, null).apply { putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray) putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray) }
Java
Intent shareIntent = Intent.createChooser(sendIntent, null); share.putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray); share.putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray);
Bu özelliği kullanırken dikkatli olun. Eklediğiniz her özel Intent
ve ChooserTarget
, sistemin önerdiği sayıyı azaltır. Genellikle özel hedefler eklenmesini önermiyoruz. Intent.EXTRA_INITIAL_INTENTS
eklemenin yaygın ve uygun bir örneği, kullanıcıların paylaşılan içerik üzerinde gerçekleştirebileceği ek işlemler sağlamaktır. Örneğin, bir kullanıcı resim paylaşır ve bunun yerine bağlantı göndermesine izin vermek için Intent.EXTRA_INITIAL_INTENTS
kullanılır. Intent.EXTRA_CHOOSER_TARGETS
eklemenin yaygın bir uygun örneği,
uygulamanızın sağladığı alakalı kişileri veya cihazları ortaya çıkarmaktır.
Belirli hedefleri bileşene göre hariç tutma
Intent.EXTRA_EXCLUDE_COMPONENTS
sağlayarak belirli hedefleri hariç tutabilirsiniz.
Bunu yalnızca kontrolünüzdeki hedefleri kaldırmak için yapın. Yaygın bir kullanım alanı, kullanıcıların uygulamanızın içinde paylaşımda bulunma olasılığı yüksek olduğundan uygulamanızın paylaşım hedeflerini gizlemektir.
Intent.createChooser()
işlevini çağırdıktan sonra amacınıza Intent.EXTRA_EXCLUDE_COMPONENTS
ekleyin:
Kotlin
val share = Intent.createChooser(Intent(), null).apply { // Only use for components you have control over val excludedComponentNames = arrayOf(ComponentName("com.example.android", "ExampleClass")) putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames) }
Java
Intent shareIntent = Intent.createChooser(new Intent(), null); // Only use for components you have control over ComponentName[] excludedComponentNames = { new ComponentName("com.example.android", "ExampleClass") }; shareIntent.putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames);
Paylaşım hakkında bilgi edinin
Kullanıcılarınızın ne zaman paylaşımda bulunduğunu ve hangi hedefi seçtiklerini bilmek faydalı olabilir. Android Sharesheet, kullanıcılarınızın bir IntentSender
kullanarak seçtiği hedeflerin ComponentName
bilgisini sağlayarak bu bilgiyi elde etmenizi sağlar.
İlk olarak BroadcastReceiver
için bir PendingIntent
oluşturun ve Intent.createChooser()
içinde IntentSender
değerini sağlayın:
Kotlin
var share = Intent(Intent.ACTION_SEND) // ... val pi = PendingIntent.getBroadcast( myContext, requestCode, Intent(myContext, MyBroadcastReceiver::class.java), PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ) share = Intent.createChooser(share, null, pi.intentSender)
Java
Intent share = new Intent(ACTION_SEND); ... PendingIntent pi = PendingIntent.getBroadcast(myContext, requestCode, new Intent(myContext, MyBroadcastReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); share = Intent.createChooser(share, null, pi.getIntentSender());
Geri aranmayı MyBroadcastReceiver
içinde alın ve Intent.EXTRA_CHOSEN_COMPONENT
şehrine bakın:
Kotlin
override fun onReceive(context: Context, intent: Intent) { ... val clickedComponent : ComponentName = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
Java
@Override public void onReceive(Context context, Intent intent) { ... ComponentName clickedComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
Paylaşım sayfasına özel işlemler ekleme
Uygulamalar, Android 14 (API Düzeyi 34) ve sonraki sürümlerde Android Sharesheet'e özel işlemler ekleyebilir.
ChooserAction.Builder
ile bir ChooserAction
oluşturun.
Simge tıklandığında çağrılan işlem olarak bir PendingIntent
belirtebilirsiniz. Tüm özel işlemlerinizi içeren bir dizi oluşturun ve bunu Intent
payının EXTRA_CHOOSER_CUSTOM_ACTIONS
değeri olarak belirtin.
Kotlin
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Android intent çözümleyiciyi kullanma
Android amaç çözümleyici, iyi tanımlanmış bir görev akışının parçası olarak başka bir uygulamaya veri gönderirken en iyi şekilde kullanılır.
Android intent çözümleyiciyi kullanmak için bir intent oluşturun ve Android Sharesheet'i çağırdığınız gibi ekstra özellikler ekleyin. Ancak Intent.createChooser()
numaralı telefonu aramayın.
ACTION_SEND
ve MIME türüyle eşleşen filtrelere sahip birden fazla yüklü uygulama varsa sistem, kullanıcının paylaşım için hedef seçmesine olanak tanıyan amaç çözümleyici adlı bir açıklama amaçlı iletişim kutusu gösterir. Tek bir uygulama eşleşirse
çalışır.
Aşağıda, kısa mesaj göndermek için Android intent çözümleyicinin nasıl kullanılacağına dair bir örnek verilmiştir:
Kotlin
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } startActivity(sendIntent)
Java
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent);
Daha fazla bilgi
Veri gönderme hakkında daha fazla bilgi için Niyetler ve Amaç Filtreleri bölümüne bakın.