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

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 gibi ContentProvider, 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ılarak MediaStore içine eklenebilir: scanFile(), Ardından content:// stili Uri paylaşılmak için uygun olan onScanCompleted() 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/*
  • 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 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 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 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

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