Diğer uygulamalara basit veriler gönderin

Android, kullanıcıların en sevdikleri uygulamaları kullanarak bilgileri hızlı ve kolay bir şekilde paylaşmalarına olanak tanımak için amaçları ve bunlarla ilişkili ekstraları kullanır.

Android, kullanıcıların uygulamalar arasında veri paylaşması için iki yöntem sunar:

  • Android paylaşım sayfası, öncelikle 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 arkadaşınızla paylaşma.
  • Android intent çözümleyici, verileri iyi tanımlanmış bir görevin sonraki aşamasına aktarmak için en uygun yöntemdir. Örneğin, uygulamanızdan bir PDF açabilir ve kullanıcıların tercih ettikleri görüntüleyiciyi seçmelerine izin verebilirsiniz.

Bir amaç oluşturduğunuzda, amacın gerçekleştirmesini istediğiniz işlemi belirtirsiniz. Android, işlemler arasında bile bir etkinlikten diğerine veri göndermek için ACTION_SEND işlemini kullanır. Verileri ve türlerini belirtmeniz gerekir. Sistem, verileri alabilecek uyumlu etkinlikleri otomatik olarak tanımlar ve kullanıcıya gösterir. Amaç çözümleyici söz konusu olduğunda, amacı yalnızca bir etkinlik işleyebiliyorsa bu etkinlik hemen başlatılır.

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

Kullanıcılarınızın uygulamalar arasında tutarlılık sağlaması için Android paylaşım sayfasını kullanmanızı kesinlikle öneririz. 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 doğru kişiyle bilgi paylaşmasına ve alakalı uygulama önerileri almasına olanak tanır. Paylaşım sayfası, özel çözümlerde kullanılamayan hedefler önerebilir ve tutarlı bir sıralama kullanır. Bunun nedeni, paylaşım sayfasının yalnızca sistem tarafından kullanılabilen uygulama ve kullanıcı etkinliğiyle ilgili bilgileri dikkate alabilmesidir.

Android paylaşım sayfasında geliştiriciler için birçok kullanışlı özellik de bulunur. Örneğin, şunları 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 paylaşım sayfasını görüntülemek için Intent.createChooser() işlevini çağırın ve Intent nesnenizi iletin. Bu işlev, niyetinizin her zaman Android paylaşım 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ı, bir etkinlikten diğerine metin içeriği göndermektir. Örneğin, çoğu tarayıcı, şu 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ğlar üzerinden arkadaşlarınızla paylaşmak için kullanışlıdır. Bunu nasıl yapacağınızla ilgili bir örneği aşağıda bulabilirsiniz:

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

Not: Gmail gibi bazı e-posta uygulamaları, EXTRA_EMAIL ve EXTRA_CC gibi ek özellikler için String[] karakterini kullanır. Bunları amacınıza 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 bölümüne verilerin URI'sini yerleştirin. Bu özellik genellikle resim 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 işaretçisinin gösterdiği verilere erişmek için izne ihtiyacı vardır. Bunu yapmanın iki önerilen yolu vardır:

  • Verileri kendi ContentProvider alanı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 izni veren URI başına izinleri kullanmaktır. Bu tür bir ContentProvider oluşturmanın kolay bir yolu, FileProvider yardımcı sınıfını kullanmaktır.
  • Sistemi MediaStore. MediaStore özellikle video, ses ve resim MIME türleri için kullanılır. 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 sayfasına bakın. Dosyalar, MediaStore içine scanFile() kullanılarak eklenebilir. Ardından, paylaşmaya uygun content:// tarzı Uri, sağlanan onScanCompleted() geri çağırma işlevine iletilir. Sisteme MediaStore eklenen içeriğe cihazdaki tüm uygulamaların erişebileceğini unutmayın.

Doğru MIME türünü kullanın

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

Alıcılar Gönderenler gönderiyor
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 IANA'nın MIME medya türleriyle ilgili resmi kaydına bakın.

Android paylaşım sayfası, sağlanan MIME türüne bağlı olarak 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 paylaşmak için ACTION_SEND_MULTIPLE işlemini, içeriğe yönlendiren 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 resmi paylaşıyorsanız "image/jpg" türünü kullanırsınız. Resim türlerinin karışımı için, herhangi bir resim türünü işleyen bir etkinlikle eşleştirmek üzere "image/*" kullanın. Farklı türlerdeki dosyaları paylaşmak mümkün olsa da alıcıya ne gönderilmek istendiği net olarak anlaşılmadığı için bu durum kesinlikle önerilmez. Birden fazla tür göndermeniz gerekiyorsa "*/*" kullanın. Verilerinizin ayrıştırılması ve işlenmesi, alıcı uygulamanın sorumluluğundadı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ı, paylaşılan metnin önizlemesini gösterir. Bazı durumlarda, paylaşılan metinlerin anlaşılması zor olabilir. https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4 gibi karmaşık bir URL'yi paylaşmayı deneyin. Daha zengin bir önizleme, kullanıcılarınıza neyin paylaşıldığı konusunda güvence verebilir.

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 açıklama ekleyin ve ClipData kullanarak alakalı bir küçük resim ekleyin.

Not: Resim içeriği URI'si bir FileProvider tarafından sağlanır. Bu genellikle yapılandırılmış bir <cache-path> olur. Daha fazla bilgi için Dosya paylaşımı başlıklı makaleyi inceleyin. Paylaşım sayfasına, küçük resim olarak kullanmak istediğiniz tüm resimleri okuma izni verdiğinizden emin olun. Daha fazla bilgi için Intent.FLAG_GRANT_READ_URI_PERMISSION sayfasına bakın.

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şlemler 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şım 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 ve uygulamalar, simge tıklandığında çağrılan işlem olarak herhangi bir Intent belirtebilir.

Android paylaşım sayfasına özel işlemler eklemek için önce ChooserAction ile 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 paylaşımın EXTRA_CHOOSER_CUSTOM_ACTIONS Intent 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 hedeflerinden önce gösterilen en fazla iki ChooserTarget nesne belirtmenize olanak tanır. Ayrıca, uygulama önerilerinden önce listelenen etkinliklere işaret eden en fazla iki amaç da belirtebilirsiniz:

Intent.EXTRA_CHOOSER_TARGETS ve Intent.EXTRA_INITIAL_INTENTS öğelerini Intent.createChooser() numarası arandıktan sonra 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 dikkatli kullanın. Eklediğiniz her özel Intent ve ChooserTarget, sistemin önerdiği sayıyı azaltır. Genel olarak özel hedefler eklemenizi önermiyoruz. Intent.EXTRA_INITIAL_INTENTS eklemenin uygun bir örneği, kullanıcıların paylaşılan içeriklerde gerçekleştirebileceği ek işlemleri sağlamaktır. Örneğin, bir kullanıcı resim paylaşıyor ve Intent.EXTRA_INITIAL_INTENTS, bunun yerine bağlantı göndermesine olanak tanımak için kullanılıyor. Intent.EXTRA_CHOOSER_TARGETS eklemeyle ilgili uygun bir örnek, uygulamanızın sunduğu alakalı kişileri veya cihazları göstermektir.

Belirli hedefleri bileşene göre hariç tutma

Intent.EXTRA_EXCLUDE_COMPONENTS sağlayarak belirli hedefleri hariç tutabilirsiniz. Bu işlemi yalnızca kontrolünüzdeki hedefleri kaldırmak için yapın. 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. Bunun nedeni, kullanıcıların uygulamanızın dışında paylaşım yapma olasılığının yüksek olmasıdır.

Intent.createChooser() işlevini çağırdıktan sonra niyetinize 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 faydalı olabilir. Android paylaşım sayfası, kullanıcılarınızın IntentSender kullanarak seçtiği hedeflerin ComponentName bilgisini almanıza olanak tanır.

Öncelikle bir BroadcastReceiver için 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 aramayı MyBroadcastReceiver içinde alın ve Intent.EXTRA_CHOSEN_COMPONENT bölümüne 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

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

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

Android intent çö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 niyet çözümleyiciyi kullanmak için bir niyet oluşturun ve Android paylaşım sayfasını çağırmak için yaptığınız gibi ekstralar ekleyin. Ancak Intent.createChooser() numarayı aramayın.

ACTION_SEND ve MIME türüyle eşleşen filtreler içeren birden fazla uygulama yüklüyse sistem, kullanıcının paylaşım hedefi seçmesine olanak tanıyan amaç çözümleyici adlı bir belirsizlik giderme iletişim kutusu gösterir. Tek bir uygulama eşleşirse bu uygulama çalıştırılır.

Android intent çözümleyiciyi kullanarak metin gönderme örneğini aşağıda bulabilirsiniz:

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 Intents and Intent Filters (Amaçlar ve Amaç Filtreleri) başlıklı makaleyi inceleyin.