Sama seperti aplikasi dapat mengirim data ke aplikasi lain, aplikasi juga dapat menerima data dari aplikasi lain. Pikirkan cara pengguna berinteraksi dengan aplikasi Anda dan jenis data yang ingin Anda terima dari aplikasi lain. Misalnya, aplikasi jejaring sosial mungkin tertarik untuk menerima konten teks, seperti URL web yang menarik, dari aplikasi lain.
Di aplikasi yang menggunakan Compose Navigation, menerima data yang dikirim oleh aplikasi lain adalah proses dua langkah:
Deklarasikan
<intent-filter>dalam manifes: Anda tetap harus menambahkan filter intent ke Aktivitas Anda dalam file AndroidManifest.xml. Hal ini memberi tahu OS Android bahwa aplikasi Anda dapat menerima tindakan tertentu (seperti ACTION_SEND) dan jenis MIME (seperti text/plain).Tentukan navDeepLink di grafik Navigasi Compose Anda: Daripada mencegat dan mengurai Intent secara manual di dalam metode onCreate atau onNewIntent Aktivitas Anda, gunakan dukungan deep link Compose Navigation. Lampirkan navDeepLink yang cocok dengan tindakan dan jenis MIME langsung ke tujuan composable yang harus menampilkan konten. NavController akan secara otomatis mencegat Intent dan mengarahkan pengguna langsung ke layar tersebut.
Target Berbagi Langsung adalah deep link ke Activity tertentu dalam aplikasi Anda. Target ini sering kali merepresentasikan seseorang atau grup, dan ditampilkan di Android Sharesheet. Misalnya, aplikasi pesan dapat menyediakan target Berbagi Langsung untuk seseorang yang melakukan deep link langsung ke percakapan dengan orang tersebut. Lihat Memberikan target Berbagi Langsung untuk petunjuk mendetail.
Jenis MIME yang didukung
Idealnya, aplikasi harus dapat menerima rentang jenis MIME seluas mungkin.
Misalnya, aplikasi pesan yang didesain untuk mengirim teks, gambar, dan video idealnya mendukung penerimaan text/*, image/*, dan video/*. Berikut beberapa jenis MIME umum untuk mengirim dan menerima data sederhana di Android.
| Penerima mendaftar untuk | Pengirim mengirim |
|---|---|
text/* |
|
image/* |
|
video/* |
|
| Ekstensi file yang didukung | application/pdf |
Lihat registry resmi jenis media MIME IANA.
Membuat target berbagi yang bagus
Saat pengguna mengetuk target berbagi yang terkait dengan aktivitas tertentu, mereka harus dapat mengonfirmasi dan mengedit konten yang dibagikan sebelum menggunakannya. Hal ini sangat penting untuk data teks.
Menerima data dengan aktivitas
Menerima data dengan aktivitas melibatkan pembaruan manifes, penanganan konten yang masuk, dan memastikan pengguna mengenali aplikasi Anda.
Mengupdate manifes Anda
Filter intent memberi tahu sistem intent mana yang diterima oleh komponen aplikasi.
Mirip dengan cara Anda membuat intent dengan tindakan ACTION_SEND di pelajaran
Mengirimkan data sederhana ke aplikasi lain, Anda membuat filter intent untuk menerima intent dengan tindakan ini. Anda
menentukan filter intent dalam manifes menggunakan elemen <intent-filter>.
Misalnya, jika aplikasi Anda menangani penerimaan konten teks, manifes yang
mencakup satu atau beberapa gambar jenis apa pun akan terlihat seperti cuplikan berikut:
<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>
Saat aplikasi lain mencoba membagikan salah satu hal ini dengan membuat intent dan meneruskannya ke startActivity(), aplikasi Anda akan tercantum sebagai opsi di Android Sharesheet atau pemecah intent. Jika pengguna
memilih aplikasi Anda, aktivitas yang sesuai akan dimulai (.ui.MyActivity dalam
contoh sebelumnya). Kemudian, Anda yang harus menangani konten dengan tepat
dalam kode dan UI Anda.
Menangani konten yang masuk
Untuk menangani konten yang dikirimkan oleh Intent, panggil
getIntent() untuk mendapatkan objek Intent. Setelah memiliki objek,
Anda dapat memeriksa isinya untuk menentukan tindakan selanjutnya. Jika aktivitas ini dapat
dimulai dari bagian lain sistem (seperti peluncur), pertimbangkan hal ini
saat memeriksa intent.
Berhati-hatilah saat memeriksa data yang masuk, Anda tidak pernah tahu apa yang mungkin dikirimkan oleh aplikasi lain kepada Anda. Misalnya, jenis MIME yang ditetapkan mungkin salah, atau gambar yang dikirim mungkin sangat besar. Selain itu, ingatlah untuk memproses data biner di thread terpisah, bukan di thread utama ("UI").
@Composable fun SharesheetHandler() { val activity = LocalActivity.current val intent = activity?.intent when (intent?.action) { Intent.ACTION_SEND -> { if (intent.type == "text/plain") { handleSendText(intent) // Handle text being sent } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } Intent.ACTION_SEND_MULTIPLE -> { if (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 state with the shared text } } private fun handleSendImage(intent: Intent) { val imageUri = IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java) imageUri?.let { // Update UI state with the shared image } } private fun handleSendMultipleImages(intent: Intent) { val imageUris = IntentCompat.getParcelableArrayListExtra(intent, Intent.EXTRA_STREAM, Uri::class.java) imageUris?.let { // Update UI state with the shared images } }
Memperbarui UI setelah menerima data dapat sesederhana mengisi
TextField,
atau bisa lebih
rumit seperti menerapkan filter foto yang menarik ke gambar. Terserah
aplikasi Anda apa yang akan terjadi selanjutnya.
Berbagi URL screenshot
Saat mengambil screenshot, Anda dapat membagikan screenshot dan URL terkait.
Hal ini memberikan pengalaman pengguna yang lebih kaya. Saat menerima URL, pastikan untuk mendapatkan
kolom EXTRA_TEXT dari intent, seperti yang ditunjukkan dalam contoh berikut:
IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java).let { // Handle the EXTRA_TEXT as well val extraText = intent.getCharSequenceExtra(Intent.EXTRA_TEXT) // Update UI state with the shared image and the EXTRA_TEXT if available }
Memastikan pengguna mengenali aplikasi Anda
Aplikasi Anda ditampilkan oleh ikon dan label di lembar berbagi dan pemecah intent Android. Keduanya didefinisikan dalam manifes. Anda dapat menetapkan label filter intent atau aktivitas untuk memberikan lebih banyak konteks.
Mulai Android 10 (level API 29), Lembar berbagi Android hanya menggunakan ikon yang ditetapkan dalam
manifes pada tag application Anda. Android mengabaikan ikon yang ditetapkan pada
tag intent-filter dan activity.