Diğer uygulamalara basit veriler gönderin

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. kolayca kontrol edebiliyorlar.

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, 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çı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öndermek için hatta işlem sınırlarını aşabilir. Şunları belirtmeniz gerekiyor: olduğunu göreceksiniz. Sistem, verileri alabilen uyumlu etkinlikleri otomatik olarak tanımlar ve kullanıcıya gösterir. Amaç çözümleyicide, Amacı yalnızca bir etkinlik gerçekleştirebiliyorsa bu 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. Sharesheet, özel çözümler için 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 Sharesheet'i kullanma

Tüm paylaşım türleri için bir intent oluşturun ve 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. 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ği gönderme

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:

KotlinJava
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)
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 ek öğeler ekleyebilirsiniz.

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

İ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 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.

KotlinJava
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))
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 anlamına gelir. 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.
  • MediaStore sistemini kullanın. MediaStore esas olarak 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şmaya 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 IANA'nın MIME medya türlerinin resmi siciline 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ürlerde 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ü, paylaştığınız içeriklerin karışımına göre değişir. Örneğin, üç JPEG resmi paylaşırsanız "image/jpg" Resim türlerinin bir karışımı için, her tür resmi işleyen bir etkinlikle eşleştirmek üzere "image/*" kullanın. Farklı türde öğeler 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. Bu işlem, alıcı uygulamanın verilerinizi işleyebilir. Aşağıda bununla ilgili bir örnek verilmiştir:

KotlinJava
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))
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. 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 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:

KotlinJava
 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)
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şlem ekleme

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

Android 14 (API Düzeyi 34) ve sonraki sürümlerde uygulamalar Android Sharesheet'e ö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ılacak 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.

KotlinJava
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)
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 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: aramadan sonra paylaşım Amacınız Intent.createChooser():

KotlinJava
val share = Intent.createChooser(myShareIntent, null).apply {
    putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray)
    putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray)
}
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. 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şır ve Intent.EXTRA_INITIAL_INTENTS şu amaçlarla kullanılır: bağlantı göndermelerine izin verin. 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 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:

KotlinJava
  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)
  }
  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şı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.

Öncelikle bir BroadcastReceiver için PendingIntent oluşturun ve Intent.createChooser()'da IntentSender değerini sağlayın:

KotlinJava
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)
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'te alın ve Intent.EXTRA_CHOSEN_COMPONENT'e bakın:

KotlinJava
override fun onReceive(context: Context, intent: Intent) {
  ...
  val clickedComponent : ComponentName = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT);
}
@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 Sharesheet'e özel işlemler ekleyebilir. Bir ChooserAction oluşturun şununla: ChooserAction.Builder. Simge tıklandığında çağrılacak 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.

KotlinJava
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)
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 amaç çözümleyici 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 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 telefon etmeyin Intent.createChooser().

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ş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:

KotlinJava
val sendIntent: Intent = Intent().apply {
    action = Intent.ACTION_SEND
    putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
    type = "text/plain"
}
startActivity(sendIntent)
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.