Diğer uygulamalara basit veriler gönderin

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:

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 bir ContentProvider 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çin MediaStore.Files bölümünü inceleyin. Dosyalar scanFile() kullanılarak MediaStore içine eklenebilir. Ardından, sağlanan onScanCompleted() geri çağırmaya paylaşıma uygun content:// stilinde bir Uri 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/*
  • 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 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

Android Sharesheet'teki özel işlemlerin ekran görüntüsü.

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

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

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.