Diğer uygulamalara basit veriler gönderin

Android, kullanıcıların favori uygulamalarını kullanarak bilgileri hızlı ve kolay bir şekilde paylaşmasına olanak tanımak için intent'leri ve bunlarla ilişkili ekstraları kullanır.

Android, kullanıcıların uygulamalar arasında veri paylaşmalarına olanak tanıyan iki yöntem sunar:

  • Android paylaşım sayfası, öncelikle uygulamanızın dışındaki içerikleri göndermek ve/veya doğrudan başka bir kullanıcıya göndermek için tasarlanmıştır. Örneğin, bir URL'yi arkadaşınızla paylaşabilirsiniz.
  • Android intent çözümleyici, iyi tanımlanmış bir görevin sonraki aşamasına veri aktarmak için en uygun yöntemdir. Örneğin, uygulamanızdan bir PDF dosyası açmak ve kullanıcıların tercih ettikleri görüntüleyiciyi seçmelerine izin vermek.

Bir intent oluştururken intent'in gerçekleştirmesini istediğiniz işlemi belirtirsiniz. Android, işlem sınırları arasında bile bir etkinlikten diğerine veri göndermek için ACTION_SEND işlemini kullanır. Verileri ve türünü belirtmeniz gerekir. Sistem, verileri alabilen uyumlu etkinlikleri otomatik olarak tanımlar ve kullanıcıya gösterir. Intent çözücü söz konusu olduğunda, intent'i yalnızca bir etkinlik işleyebiliyorsa söz konusu etkinlik hemen başlar.

Android Sharesheet'i neden kullanmalısınız?

Kullanıcılarınıza uygulamalar arasında tutarlılık sağlamak için Android paylaşım sayfasını kullanmanızı önemle tavsiye ederiz. Uygulamanızın kendi paylaşım hedefleri listesini göstermeyin veya kendi paylaşım sayfası varyasyonlarınızı oluşturmayın.

Android Paylaşım Sayfası, kullanıcıların tek bir dokunuşla bilgileri doğru kişiyle paylaşmasına ve alakalı uygulama önerileri almasına olanak tanır. Paylaşım sayfası, özel çözümler tarafından kullanılamayan hedefler önerebilir ve tutarlı bir sıralama kullanır. Bunun nedeni, paylaşım sayfasının yalnızca sistemin erişebildiği uygulama ve kullanıcı etkinliği bilgilerini hesaba katabilmesidir.

Android paylaşım sayfası, geliştiriciler için birçok kullanışlı özelliğe de sahiptir. Örneğin, aşağıdakileri yapabilirsiniz:

Android Paylaş Sayfası'nı kullanma

Tüm paylaşım türleri için bir intent oluşturun ve intent'in işlemini Intent.ACTION_SEND olarak ayarlayın. Android paylaşım sayfasını görüntülemek için Intent nesnenizi geçirerek Intent.createChooser() işlevini çağırın. Intent'inizin her zaman Android Paylaş Sayfası'nı gösteren bir sürümünü döndürür.

Metin içeriği gönderme

Android Paylaşım Sayfası'nın en basit ve yaygın kullanımı, metin içeriğini bir etkinlikten diğerine göndermektir. Örneğin, çoğu tarayıcı, o anda görüntülenen sayfanın URL'sini başka bir uygulamayla metin olarak paylaşabilir. Bu özellik, bir makaleyi veya web sitesini e-posta ya da sosyal ağ üzerinden arkadaşlarınızla paylaşmak için kullanışlıdır. Aşağıda bunun nasıl yapı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"
}

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ısı (EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC), e-posta konusu (EXTRA_SUBJECT) gibi daha fazla bilgi eklemek için ek öğeler ekleyebilirsiniz.

Not: Gmail gibi bazı e-posta uygulamaları, EXTRA_EMAIL ve EXTRA_CC gibi ekstralar için String[] değerini bekler. Bu öğeleri intent'inize eklemek için putExtra(String, String[]) simgesini kullanın.

İkili içerik gönderme

ACTION_SEND işlemini kullanarak ikili verileri paylaşın. Uygun MIME türünü ayarlayın ve aşağıdaki örnekte gösterildiği gibi ek EXTRA_STREAM alanına verilerin URI'sini yerleştirin. Bu yöntem genellikle resim paylaşmak için kullanılır ancak herhangi bir tür ikili içerik 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 işaret ettiği verilere erişmesi için izne ihtiyacı vardır. Bunu yapmanın iki önerilen yolu vardır:

  • Verileri kendi ContentProvider'inizde saklayı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 izni veren URI başına izinler kullanmaktır. Bu tür bir ContentProvider oluşturmanın kolay bir yolu, FileProvider yardımcı sınıfını kullanmaktır.
  • Sistem MediaStore'ü kullanın. MediaStore öncelikle video, ses ve resim MIME türleri içindir. Ancak Android 3.0 (API düzeyi 11) sürümünden itibaren medya dışı türleri de depolayabilir. Daha fazla bilgi için MediaStore.Files başlıklı makaleyi inceleyin. Dosyalar, scanFile() kullanılarak MediaStore içine yerleştirilebilir. Ardından, paylaşım için uygun bir content:// stilinde Uri, sağlanan onScanCompleted() geri çağırma işlevine iletilir. Sisteme MediaStore eklendikten sonra içeriğe cihazdaki tüm uygulamaların erişebileceğini unutmayın.

Doğru MIME türünü kullanma

Gönderdiğiniz veriler için kullanılabilen en spesifik MIME türünü sağlayın. Örneğin, düz metin paylaşırken text/plain kullanın. Android'de basit veriler gönderirken kullanılan bazı yaygın MIME türleri şunlardır:

Alıcılar aşağıdakilere kaydolmalıdır: Gönderenler gönderir
text/*
  • text/plain
  • text/rtf
  • text/html
  • text/json
`image/*`
  • image/jpg
  • image/png
  • image/gif
video/*
  • video/mp4
  • video/3gp
Desteklenen dosya uzantıları application/pdf

MIME türleri hakkında daha fazla bilgi için MIME medya türlerinin resmi IANA kayıtlarına bakın.

Android paylaşım sayfası, sağlanan MIME türüne bağlı olarak bir içerik önizlemesi gösterebilir. Bazı önizleme özellikleri yalnızca belirli türlerde kullanılabilir.

Birden fazla içerik paylaşma

Birden fazla içerik parçası paylaşmak için ACTION_SEND_MULTIPLE işlemini, içeriği işaret eden URI'lerin listesiyle birlikte kullanın. MIME türü, paylaştığınız içeriklerin karışımına göre değişir. Örneğin, üç JPEG resim paylaşırsanız "image/jpg" türünü kullanırsınız. Resim türlerinin bir karışımı için "image/*" kullanarak her tür resmi işleyen bir etkinlikle eşleşin. Farklı türde öğeleri paylaşabilirsiniz ancak alıcıya ne gönderilmek istendiği net olmadığı için bunu kesinlikle önermeyiz. Birden fazla tür göndermeniz gerekiyorsa "*/*" kullanın. Verilerinizi ayrıştırmak ve işlemek, 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 verilere işaret ettiğinden emin olun.

Metin önizlemelerine zengin içerik ekleme

Android 10 (API düzeyi 29) sürümünden itibaren Android paylaşım sayfasında, paylaşılan metnin önizlemesi gösterilir. Bazı durumlarda, paylaşılan metnin anlaşılması zor olabilir. https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4 gibi karmaşık bir URL paylaşabilirsiniz. Daha zengin bir önizleme, kullanıcılarınızın paylaşılan içerik hakkında güvende hissetmesini sağlayabilir.

Metin önizliyorsanız başlık, küçük resim veya her ikisini birden ayarlayabilirsiniz. Intent.createChooser() işlevini çağırmadan önce Intent.EXTRA_TITLE işlevine bir açıklama ve ClipData işlevini kullanarak alakalı bir küçük resim ekleyin.

Not: Resim içerik URI'si bir FileProvider'den (genellikle yapılandırılmış bir <cache-path>'dan) sağlanır. Daha fazla bilgi için Dosya paylaşma başlıklı makaleyi inceleyin. Paylaşım sayfasına, küçük resim olarak kullanmak istediğiniz tüm resimleri okuması için gerekli izinleri verdiğinizden emin olun. Daha fazla bilgi için Intent.FLAG_GRANT_READ_URI_PERMISSION başlıklı makaleyi 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 aşağıdaki gibi görünür:

Paylaşım sayfasına özel işlem ekleme

Android paylaşım sayfasındaki özel işlemlerin ekran görüntüsü.

Android 14 (API düzeyi 34) ve sonraki sürümlerde uygulamalar, Android Paylaş Sayfası'na özel işlemler ekleyebilir. Özel işlemler, Android paylaşım sayfasının üst kısmında küçük işlem simgeleri olarak gösterilir. Uygulamalar, simge tıklandığında çağrılacak işlem olarak herhangi bir Intent belirtebilir.

Android paylaşım sayfasına özel işlem eklemek için önce bir ChooserAction with ChooserAction.Builder 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 paylaşımının EXTRA_CHOOSER_CUSTOM_ACTIONS 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 ekleme

Android paylaşım sayfası, ChooserTargetServices kaynağından yüklenen paylaşım kısayolları ve seçici hedefleri gösterilmeden ö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 intent de belirtebilirsiniz:

Intent.createChooser()'i çağırdıktan sonra paylaşım intent'inize Intent.EXTRA_CHOOSER_TARGETS ve Intent.EXTRA_INITIAL_INTENTS 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 dikkatli kullanın. Eklediğiniz her özel Intent ve ChooserTarget, sistemin önerdiği sayıyı azaltır. Genel olarak özel hedef eklemenizi önermeyiz. Intent.EXTRA_INITIAL_INTENTS eklemenin yaygın ve uygun bir örneği, kullanıcıların ortak içerik üzerinde yapabileceği ek işlemler sunmaktır. Örneğin, bir kullanıcı resim paylaşıyorsa bunun yerine bağlantı göndermesine izin vermek için Intent.EXTRA_INITIAL_INTENTS kullanılır. Intent.EXTRA_CHOOSER_TARGETS eklemeyle ilgili yaygın ve uygun bir örnek, uygulamanızın sağladığı alakalı kişileri veya cihazları göstermek olabilir.

Bileşene göre belirli hedefleri hariç tutma

Intent.EXTRA_EXCLUDE_COMPONENTS sağlayarak belirli hedefleri hariç tutabilirsiniz. Bunu yalnızca üzerinde kontrol sahibi olduğunuz hedefleri kaldırmak için yapın. Kullanıcıların uygulamanızın dışında paylaşım yapma niyetinde olması muhtemel olduğundan, kullanıcılarınız uygulamanızdan paylaşım yaptığında uygulamanızın paylaşım hedeflerini gizlemek yaygın bir kullanım alanıdır.

Intent.createChooser()'u aradıktan sonra intent'inize 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 edinme

Kullanıcılarınızın ne zaman paylaşım yaptığını ve hangi hedefi seçtiğini bilmek yararlı olabilir. Android paylaşım sayfası, kullanıcılarınızın IntentSender kullanarak seçtiği hedeflerin ComponentName değerini sağlayarak bu bilgileri almanıza olanak tanır.

Öncelikle bir BroadcastReceiver için PendingIntent oluşturun ve Intent.createChooser()'da 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());

MyBroadcastReceiver'te geri aramayı alın ve Intent.EXTRA_CHOSEN_COMPONENT'e 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şlem ekleme

Android 14 (API düzeyi 34) ve sonraki sürümlerde uygulamalar, Android Paylaş Sayfası'na özel işlemler ekleyebilir. ChooserAction.Builder ile 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 paylaşımının EXTRA_CHOOSER_CUSTOM_ACTIONS 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

ACTION_SEND intent çözümleyicisinin ekran görüntüsü.

Android intent çözümleyici, iyi tanımlanmış bir görev akışı kapsamında 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 paylaşım sayfasını çağırırken yaptığınız gibi ekstralar ekleyin. Ancak Intent.createChooser() numarayı 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şacağı bir hedef seçmesine olanak tanıyan intent resolver adlı bir anlamlandırma iletişim kutusu görüntüler. Tek bir uygulama eşleşirse uygulama çalışır.

Metin göndermek için Android intent çözümleyicisinin nasıl kullanı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"
}
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 Intent'ler ve Intent Filtreleri başlıklı makaleyi inceleyin.