Uygulamalar diğer uygulamalara veri gönderebildiği gibi diğer uygulamalardan da veri alabilir. Kullanıcıların uygulamanızla nasıl etkileşim kurduğunu ve hangi verilerle ilişkili olduğunu düşünün almak istediğiniz türler bulunur. Örneğin, bir sosyal ağ uygulaması, ilgi çekici bir web URL'si gibi metin içeriği almak isteyebilir.
Diğer uygulamaların kullanıcıları, Android Paylaşım Sayfası veya intent çözümleyici aracılığıyla uygulamanıza sık sık veri gönderir. Uygulamanıza veri gönderen uygulamalar, bu veriler için bir MIME türü ayarlamalıdır. Uygulamanız başka bir uygulama tarafından gönderilen verileri şurada alabilir: şu yöntemleri kullanabilirsiniz:
- Manifest'te eşleşen
intent-filter
etiketine sahip birActivity
- Uygulamanız tarafından yayınlanan Kısayollar paylaşılıyor.
Doğrudan Paylaşım hedefleri, uygulamanızdaki belirli bir etkinliğe ait derin bağlantılardır. Genellikle bir kişiyi veya grubu temsil ederler ve Android Sharesheet bunları gösterir. Örneğin, bir mesajlaşma uygulaması, bir kullanıcı için doğrudan paylaşım hedefi sağlayabilir. derin bağlantıları kullanarak söz konusu kişiyle sohbet edebilirsiniz. Ayrıntılı talimatlar için Doğrudan Paylaşım hedefleri sağlama başlıklı makaleyi inceleyin.
Destek MIME türleri
İdeal olarak, bir uygulama mümkün olan en geniş MIME türü aralığını almalıdır.
Örneğin, metin, resim ve video göndermek için tasarlanmış bir mesajlaşma uygulaması ideal olarak text/*
, image/*
ve video/*
'yi destekler. Aşağıda birkaç örnek verilmiştir
yaygın olarak kullanılan MIME türleri.
Alıcılar | Gönderenler gönderir |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Desteklenen dosya uzantıları | application/pdf |
MIME medya türlerinin resmi IANA sicil defterine bakın.
Paylaşım için mükemmel hedefler belirleyin
Kullanıcılar, belirli bir etkinlikle ilişkili bir paylaşım hedefine dokunduklarında, paylaşılan içeriği kullanmadan önce onaylayabilir ve düzenleyebilir. Bu, özellikle metin verileri için önemlidir.
Etkinlikle veri alma
Bir etkinlikle veri almak, manifestinizi güncellemeyi, gelen içeriği işlemeyi ve kullanıcının uygulamanızı tanımasını sağlamayı içerir.
Manifest dosyanızı güncelleme
Intent filtreleri, sisteme bir uygulama bileşeninin hangi amaçları kabul ettiğini bildirir.
Şuradaki ACTION_SEND
işlemiyle bir amaç oluşturmanıza benzer:
Diğer uygulamalara basit veriler gönderme
bu işlemle niyet almak için intent filtreleri
oluşturacaksınız. Siz
<intent-filter>
öğesini kullanarak manifest dosyanızda bir intent filtresi tanımlayın.
Örneğin, uygulamanız metin içeriği alıyorsa herhangi bir türde bir veya daha fazla resim içeren bir manifest aşağıdaki snippet'e benzer:
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
Başka bir uygulama, bir
ve bunu startActivity()
, uygulamanız için
özelliğinin, Android Sharesheet veya intent çözümleyicide seçenek olarak listelenmesi gerekir. Kullanıcı
uygulamanızı seçtiğinde, ilgili etkinliği başlatır (.ui.MyActivity
önceki örneğe bakın). Ardından, içeriği uygun şekilde yönetmek size kalmıştır
bir kontrol listesidir.
Gelen içeriği işleme
Bir Intent
tarafından yayınlanan içeriği işlemek için şu çağrıyı yapın:
Intent
nesnesini almak için getIntent()
. Nesneyi aldıktan sonra, bir sonraki adımı belirlemek için içeriğini inceleyebilirsiniz. Bu etkinlik sistemin diğer bölümlerinden (ör. başlatıcı) başlatılabiliyorsa niyeti incelerken bunu göz önünde bulundurun.
Gelen verileri kontrol etmek için çok dikkatli olun. Başka ne olduğunu asla gönderebilir. Örneğin, yanlış MIME türü ayarlanmış olabilir veya gönderilen resim çok büyük olabilir. Ayrıca, ikili verileri işlemeyi ana ("UI") iş parçacığı yerine ayrı bir iş parçacığı içinde görüntülenir.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... when { intent?.action == Intent.ACTION_SEND -> { if ("text/plain" == intent.type) { handleSendText(intent) // Handle text being sent } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } intent?.action == Intent.ACTION_SEND_MULTIPLE && intent.type?.startsWith("image/") == true -> { handleSendMultipleImages(intent) // Handle multiple images being sent } else -> { // Handle other intents, such as being started from the home screen } } ... } private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update UI to reflect text being shared } } private fun handleSendImage(intent: Intent) { (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let { // Update UI to reflect image being shared } } private fun handleSendMultipleImages(intent: Intent) { intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let { // Update UI to reflect multiple images being shared } }
Java
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
Verileri aldıktan sonra kullanıcı arayüzünü güncellemek, bir
EditText
veya daha yüksek olabilir
Örneğin, bir resme ilginç bir fotoğraf filtresi uygulamak gibi. Bundan sonra ne olacağı uygulamanıza bağlıdır.
Kullanıcıların uygulamanızı tanımasını sağlayın
Uygulamanız, icon ve Android'deki label Paylaşım sayfası ve amaç çözümleyici. Her ikisi de manifest dosyasında tanımlanır. Daha fazla bağlam sağlamak için etkinlik veya intent filtresi etiketleri ayarlayabilirsiniz.
Android 10 (API düzeyi 29) itibarıyla Android paylaşım sayfası yalnızca application
etiketinizdeki manifest dosyasında ayarlanan simgeleri kullanır. Android, intent-filter
ve activity
etiketlerinde ayarlanan simgeleri yoksayar.