Baik itu gambar lucu, video informatif, atau klip audio yang menarik, memungkinkan pengguna berbagi konten akan memperkaya pengalaman mereka dan mendorong interaksi. Dokumen ini membahas hal-hal penting tentang berbagi media di Android, termasuk API dan teknik yang Anda perlukan untuk mengintegrasikan kemampuan ini.
Dirancang untuk berbagi
Desain Android mempromosikan interoperabilitas antar-aplikasi menggunakan sistem berdasarkan Intent. Intent adalah deskripsi abstrak dari operasi yang akan dilakukan. Intent memungkinkan aplikasi berkomunikasi satu sama lain tanpa harus mengetahui detail satu sama lain.
Saat ingin membagikan data atau memulai tindakan, aplikasi akan membuat Intent yang menentukan jenis konten dan operasi. Sistem Android menampilkan daftar aplikasi relevan yang dapat menangani Intent tersebut, sehingga pengguna dapat memilih aplikasi yang akan digunakan. Pendekatan ini mendorong ekosistem kolaboratif.
Berbagi teks hanya memerlukan beberapa baris kode:
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to share.")
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
Baris createChooser menampilkan UI Android Sharesheet, yang
memungkinkan pengguna berbagi informasi dengan orang lain — termasuk saran aplikasi yang relevan —
dengan sekali ketuk. Hal lain yang dapat Anda lakukan dengan Android Sharesheet meliputi:
- Mencari tahu kapan pengguna Anda menyelesaikan berbagi dan kepada siapa dibagikan
- Menyediakan pratinjau konten rich text, mulai dari Android 10 (API level 29)
Lihat Mengirim data sederhana ke aplikasi lain untuk mengetahui informasi selengkapnya tentang Android Sharesheet dan cara menggunakannya.
Menyediakan target Berbagi Langsung agar lebih mudah dan lebih cepat bagi pengguna aplikasi lain untuk berbagi URL, gambar, atau jenis data lainnya dengan aplikasi Anda. Langsung Bagikan berfungsi dengan menampilkan kontak dari pesan dan aplikasi sosial secara langsung di Android Sharesheet, tanpa mengharuskan pengguna memilih aplikasi cari kontak.
Mendukung menerima konten lengkap melalui
OnReceiveContentListener. API ini menyediakan satu tempat untuk
kode untuk menangani penerimaan semua konten, dari teks biasa dan bergaya hingga markup,
gambar, video, file audio, dan lainnya. Konten dapat berasal dari keyboard
gambar, tarik lalu lepas, atau papan klip.
Berbagi file media
Intent hanya dapat berisi data dalam jumlah kecil, jadi Android menyediakan cara bagi Intent untuk memuat handle yang aman ke file. Berbagi {i>file<i} media dengan aman dari aplikasi Anda melibatkan:
- Konfigurasi aplikasi Anda untuk menawarkan handle yang aman ke file tersebut — dalam bentuk
URI konten — menggunakan komponen
FileProviderAndroid. - Tentukan direktori yang dapat dibagikan di manifes Anda.
- Gunakan
getUriForFileuntuk membuat URL konten yang berfungsi sebagai URL yang aman ke file. - Buat Intent yang memberikan izin ke file tersebut.
Lihat Tentang berbagi file untuk mengetahui informasi selengkapnya tentang cara berbagi file dengan aman.
Optimalkan media untuk berbagi
Apakah Anda membagikan media ke pengguna lain di aplikasi Anda, atau membagikan media ke aplikasi lain, pastikan Anda telah membagikan media yang menawarkan berbagi pengalaman.
Menciptakan keseimbangan antara kualitas dan ukuran
File media berukuran besar dapat dengan cepat menghabiskan bandwidth dan penyimpanan, sehingga menyebabkan keterlambatan yang menjengkelkan dan potensi biaya kelebihan data bagi pengguna Anda. Kompresi adalah teman terbaik Anda di sini.
- Kompresi gambar: Gunakan format kompresi gambar modern seperti WebP dan AVIF, yang menawarkan rasio kompresi yang unggul dibandingkan JPEG tanpa penurunan kualitas yang signifikan. Bereksperimen dengan berbagai kualitas {i>setting<i} untuk menemukan titik yang tepat.
- Kompresi video: Manfaatkan kecanggihan video AV1 atau H.265 (HEVC)
kompresi untuk memberikan efisiensi
kompresi yang lebih baik dengan tetap
kualitas visual yang prima. Anda dapat memeriksa keberadaan encoding hardware
di perangkat Android 10 dan yang lebih baru, serta
mediaPerformanceClassuntuk membantu menentukan apa yang paling dapat didukung oleh perangkat Anda. Pertimbangkan untuk menawarkan opsi resolusi yang berbeda untuk memenuhi berbagai preferensi pengguna dan kondisi jaringan.
fun hasHardwareEncodingSupportFor(mimeType: String): Boolean {
val codecList = MediaCodecList(REGULAR_CODECS)
val codecInfos = codecList.codecInfos
for ( codecInfo in codecInfos ) {
if (!codecInfo.isEncoder()) {
continue;
}
if (!codecInfo.isHardwareAccelerated()) {
continue;
}
val types: Array<String> = codecInfo.getSupportedTypes()
for (j in types.indices) {
if (types[j].equals(mimeType, ignoreCase = true)) {
return true
}
}
}
return false
}
// test for AV1 hardware encoding support
val hasAV1 = hasHardwareEncodingSupportFor("video/av01")
Menyesuaikan media
Platform media sosial sering menerapkan dimensi dan rasio aspek tertentu untuk media yang dibagikan. Dengan secara proaktif mengubah ukuran dan memangkas file media sebelum , Anda dapat menghindari distorsi atau masalah pemformatan yang tidak terduga saat yang diposting pengguna ke platform favorit mereka.
Berikan petunjuk dan panduan yang jelas tentang cara pengguna mengoptimalkan media mereka sebelum berbagi. Hal ini dapat mencakup tips untuk menyesuaikan encoding kecepatan bit, menetapkan parameter kuantisasi, memilih format video, memilih ukuran file yang sesuai, atau memahami dampak berbagai opsi berbagi.
Meningkatkan visibilitas media
Menambahkan metadata yang relevan, seperti judul, deskripsi, dan tag ke file media dapat meningkatkan visibilitasnya. Dorong pengguna untuk menambahkan deskripsi dan teks saat berbagi, yang akan mempersonalisasi pengalaman.
Menambahkan metadata ke gambar
Class Jetpack ExifInterface menulis metadata ke JPEG, PNG, dan WebP gambar dalam bentuk tag Exif.
// sets the title of the image in the form of Exif data
val exif = ExifInterface(imageFile)
exif.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, "Beautiful sunset")
exif.saveAttributes()