Android, kullanıcıların bilgileri hızlı ve güvenli bir şekilde paylaşabilmesi için amaçları ve bunlarla ilişkili ekstraları kullanır. kullanarak kolayca iletişim kurabilir.
Android, kullanıcıların uygulamalar arasında veri paylaşması için iki yol sunar:
- Android Sharesheet, uygulamanızın dışına ve/veya doğrudan içerik göndermek kullanıcıya gönderebilirsiniz. Örneğin, arkadaşınızla URL paylaşma.
- Android intent çözümleyici, verileri Google Play'e bir sonraki aşamaya geçmektir. Örneğin, uygulamanızdan bir PDF dosyası açıp kullanıcıların tercih ettikleri izleyiciyi seçebilirler.
Bir amaç oluşturduğunuzda niyetin gerçekleştirmesini istediğiniz işlemi belirtirsiniz.
Android, ACTION_SEND
işlemini kullanır
bir etkinlikten diğerine veri gönderme,
hatta işlem sınırlarını aşabilir. Şunları belirtmeniz gerekiyor:
olduğunu göreceksiniz. Sistem, uyumlu etkinlikleri otomatik olarak tanımlar
kullanıcılara görüntüleyebilir. Amaç çözümleyicide,
Amacı yalnızca bir etkinlik gerçekleştirebiliyorsa bu etkinlik hemen başlar.
Android Sharesheet'i neden kullanmalısınız?
Tüm platformlarda kullanıcılarınızın tutarlı olması için Android Sharesheet'i kullanmanızı Uygulamanızın paylaşım hedefleri listesini göstermeyin veya kendi paylaşım hedefi listenizi oluşturmayın Paylaşım sayfası varyasyonları.
Android Sharesheet, kullanıcıların tek bir dokunuşla alakalı uygulama önerileriyle, doğru kişiyle. Sharesheet, özel çözümler için kullanılamayan hedefler önerebilir ve tutarlı bir sıralama kullanır. Bunun nedeni, Sharesheet'in uygulama ve kullanıcı etkinliğiyle ilgili bilgileri hesaba katabilmesidir yalnızca sistem tarafından kullanılabilir.
Android Sharesheet'te geliştiriciler için birçok kullanışlı özellik de bulunmaktadır. Örneğin, şunları yapabilirsiniz: şunları yapın:
- Kullanıcılarınızın bir paylaşımı ne zaman ve nereye tamamlayacaklarını öğrenme
- Özel
ChooserTarget
ve uygulama hedefleri ekleyin - Android 10'dan (API düzeyi 29) itibaren 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
Android Sharesheet'i görüntülemek için şunu arayın:
Intent.createChooser()
,
Intent
nesnenizi iletiyor.
Amacınızın her zaman Android Sharesheet'i görüntüleyen bir sürümünü döndürür.
Metin içeriğini gönder
Android Sharesheet'in en basit ve en yaygın kullanımı atfedebiliriz. Örneğin, çoğu tarayıcı, o anda görüntülenen başka bir uygulamada metin olarak kullanabilirsiniz. Bu özellik, bir makaleyi veya web sitesini veya sosyal ağ iletişimini kolaylaştırabilir. Bunun nasıl yapılacağına dair bir örnek aşağıda 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, e-posta alıcıları gibi daha fazla bilgi eklemek için fazladan öğeler ekleyebilirsiniz
(EXTRA_EMAIL
,
EXTRA_CC
,
EXTRA_BCC
),
e-posta konusu
(EXTRA_SUBJECT
) vb.
Not: Gmail gibi bazı e-posta uygulamalarında,
Şu gibi ekstralar için String[]
:
EXTRA_EMAIL
ve EXTRA_CC
. Tekliflerinizi otomatikleştirmek ve optimize etmek için
putExtra(String, String[])
.
bunları amacınıza ekleyin.
İkili program içeriği gönder
ACTION_SEND
işlemini kullanarak ikili program verilerini paylaşın.
Uygun MIME türünü ayarlayın ve ekstra
EXTRA_STREAM
, olduğu gibi
aşağıdaki örnekte gösterilmiştir.
Bu yaygın olarak görsel paylaşmak için kullanılır ancak her türlü ikili içeriği 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
üzerindeki verilere erişmesi için izin gerekiyor
işaret eder. Bunu yapmak için önerilen iki yöntem vardır:
- Verileri kendi
ContentProvider
cihazınızda depolayın ve uygulamaların sağlayıcınıza erişmek için doğru izne sahip olduğunu kontrol edin. Bilgi sağlamak için tercih edilen mekanizma erişimi olan URI başına izinleri kullanmaktır. ve yalnızca alıcı uygulamaya erişim izni verir. Proje oluşturmanın kolay bir yolu Bunun gibiContentProvider
,FileProvider
yardımcı sınıf. MediaStore
sistemini kullanın.MediaStore
esas olarak video, ses ve resim MIME türleri içindir. Ancak, Android 3.0 (API) ile başlayarak 11. düzey) içeriyorsa medya dışı türleri de depolayabilir. Daha fazla bilgi için bkz.MediaStore.Files
Dosyalar, aşağıdakileri kullanılarakMediaStore
içine eklenebilir:scanFile()
, Ardındancontent://
stiliUri
paylaşılmak için uygun olanonScanCompleted()
geri arama.MediaStore
sistemine eklendikten sonra, içeriğin erişilebilir olduğunu unutmayın. cihazdaki herhangi bir uygulama.
Doğru MIME türünü kullanın
Veriler için mevcut olan en spesifik MIME türünü sağlayın
gönderiliyor. Örneğin, düz metin paylaşırken text/plain
kullanın. Aşağıda birkaç örnek verilmiştir
yaygın olarak kullanılan MIME türleri:
Alıcılar | Gönderenler gönderdiği |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Desteklenen dosya uzantıları | application/pdf |
MIME türleri hakkında daha fazla bilgi için IANA MIME medya türlerinin resmi kaydı.
Android Sharesheet, sağlanan MIME türüne bağlı olarak bir içerik önizlemesi gösterebilir. Biraz önizleme özellikleri yalnızca belirli türler için kullanılabilir.
Birden fazla içerik paylaşma
Birden fazla içerik paylaşmak için ACTION_SEND_MULTIPLE
özelliğini kullanın
bu işlemi, içeriğe işaret eden URI'lerin listesiyle birlikte getirir. MIME türü
ve paylaştığınız içeriğin bir kısmıdır. Örneğin, üç JPEG resmi paylaşırsanız
"image/jpg"
Karışık resim türleri için "image/*"
kullanarak
her tür resmi işleyen bir etkinlik. Çeşitli türleri paylaşmak mümkün olsa da,
bundan kaçının
alıcı tarafından ne gönderilmek üzere anlaşılmaz. Birden fazla tür göndermeniz gerekiyorsa
"*/*"
Bu işlem, alıcı uygulamanın
verilerinizi işleyebilir. 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
nesnenin işaret ettiğinden emin olun
erişimi olan bir veri kodu sağlar.
Metin önizlemelerine zengin içerik ekleme
Android Sharesheet, Android 10'dan (API düzeyi 29) başlayarak,
paylaşıldı. Bazı durumlarda, paylaşılan metinleri anlamak zor olabilir. Bir
https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
gibi karmaşık URL'ler. Daha zengin
önizleme, kullanıcılarınıza nelerin paylaşıldığını rahatlatabilir.
Metin önizliyorsanız bir başlık, küçük resim veya her ikisini birden ayarlayabilirsiniz. Şu videoya bir açıklama ekleyin:
Intent.createChooser()
numaralı telefonu aramadan önce Intent.EXTRA_TITLE
ve
küçük resmi kullanmak için ClipData
kullanın.
Not: Resim içeriği URI'si
FileProvider
(genellikle yapılandırılmış bir <cache-path>
üzerinden).
Daha fazla bilgi için Dosya paylaşma başlıklı makaleyi inceleyin. Proje başlatma belgesinde
Sharesheet'in küçük resim olarak kullanmak istediğiniz her resmi okuması için doğru izinlere sahip olması gerekir. 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 ekle
Android 14 (API Düzeyi 34) ve sonraki sürümlerde uygulamalar Android Sharesheet'e özel işlemler ekleyebilir.
Özel işlemler, Android Sharesheet'in üst kısmında küçük işlem simgeleri ve
simge tıklandığında çağrılan işlem olarak herhangi bir Intent
belirtebilir.
Android Sharesheet'e özel işlemler eklemek için önce bir
ChooserAction
.
şununla:
ChooserAction.Builder
.
Simge tıklandığında çağrılan işlem olarak bir PendingIntent
belirtebilirsiniz. İçerik üretme
tüm özel işlemlerinizi içeren bir dizidir ve bunu,
EXTRA_CHOOSER_CUSTOM_ACTIONS
.
oranında Intent
.
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 iki ChooserTarget
nesnesini belirtmenize olanak tanır:
paylaşım kısayolları ve seçici hedefleri ChooserTargetServices
kaynağından yüklenmeden önce gösterilir. Ayrıca transkriptinizi
listelenen etkinliklere işaret eden en fazla iki amaç belirtin
kontrol edin:
Intent.EXTRA_CHOOSER_TARGETS
ve Intent.EXTRA_INITIAL_INTENTS
adlı kullanıcıları şuraya ekle:
görüşmeden sonra paylaşım amacınız
Intent.createChooser()
:
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. Her özel Intent
ve eklediğiniz ChooserTarget
sistemin önerdiği sayıyı azaltır. Genellikle
yer vermekten kaçının. Bir projeyi tamamlamak için
Intent.EXTRA_INITIAL_INTENTS
, kullanıcıların paylaşılanlar üzerinde yapabileceği ek işlemler sağlamaktır
içerik. Örneğin, bir kullanıcı resim paylaşır ve Intent.EXTRA_INITIAL_INTENTS
şu amaçlarla kullanılır:
bağlantı göndermelerine izin verin. Intent.EXTRA_CHOOSER_TARGETS
eklemek için yaygın olarak kullanılan uygun bir örnek
uygulamanızın sağladığı alakalı kişileri veya cihazları öne çıkarmaktır.
Belirli hedefleri bileşene göre hariç tut
Intent.EXTRA_EXCLUDE_COMPONENTS
sağlayarak belirli hedefleri hariç tutabilirsiniz.
Bunu yalnızca kontrol sahibi olduğunuz hedefleri kaldırmak için yapın. Yaygın kullanım alanlarından biri,
paylaşma olasılığı yüksek olduğundan, kullanıcılar uygulamanızın içinden paylaşımda bulunduğunda uygulamanızın paylaşım hedeflerini
iyi performans göstermenizi sağlar.
Intent.createChooser()
çağrısından 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. İlgili içeriği oluşturmak için kullanılan
Android Sharesheet; ComponentName
kullanıcılarınızın bir IntentSender
kullanarak seçtiği hedefler.
İlk olarak BroadcastReceiver
için bir PendingIntent
oluşturun ve
Intent.createChooser()
biriminde IntentSender
:
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());
MyBroadcastReceiver
içinde sizi geri arayın ve
Intent.EXTRA_CHOSEN_COMPONENT
:
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 ekle
Android 14 (API Düzeyi 34) ve sonraki sürümlerde uygulamalar Android Sharesheet'e özel işlemler ekleyebilir.
Bir ChooserAction
oluşturun
şununla:
ChooserAction.Builder
.
Simge tıklandığında çağrılan işlem olarak bir PendingIntent
belirtebilirsiniz. İçerik üretme
tüm özel işlemlerinizi içeren bir dizidir ve bunu,
EXTRA_CHOOSER_CUSTOM_ACTIONS
.
oranında Intent
.
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 intent çözümleyici, iyi tanımlanmış bir görev akışı kapsamında başka bir uygulamaya veri gönderirken kullanılır.
Android intent çözümleyiciyi kullanmak için bir intent oluşturun ve çağırmak istediğiniz ekstra öğeleri ekleyin
paylaşım sayfasıdır. Ancak telefon etmeyin
Intent.createChooser()
.
Eşleşen filtrelere sahip birden fazla yüklü uygulama varsa
ACTION_SEND
.
MIME türünü belirttiğinde sistem, amaç çözümleyici adlı bir açıklama iletişim kutusu görüntüler.
kullanıcının paylaşım için bir hedef seçmesine olanak tanır. Tek bir uygulama
eşleştiğini gösterir.
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 bkz. Niyetler ve Amaç Filtreleri.