Saya bertanya-tanya bagaimana aplikasi Android dan Android mengimplementasikan tombol berbagi dan mekanisme berbagi. Misalnya, ketika saya menekan tombol bagikan di YouTube, daftar dari aplikasi untuk dibagikan akan muncul. Bagaimana daftar ini ditentukan? Apakah ada maksud "bagikan" tertentu, dan kemudian semua tempat yang mampu membagikan jenis niat yang disediakan dalam ekstra maksud muncul? Apa nama teknis dari pola desain yang digunakan untuk mengimplementasikan ini? Terima kasih.
share-menu
intents
Jack Maddington
sumber
sumber
Jawaban:
Ada dua bagian untuk ini: mekanisme untuk aplikasi komunikasi untuk mengatakan mereka dapat berbagi hal-hal, dan mekanisme untuk aplikasi dengan konten untuk dibagikan. Saya akan berurusan dengan mereka satu per satu, tetapi pertama-tama catatan singkat tentang niat .
Maksud
The niat di Android adalah apa yang digunakan untuk memulai sebuah aplikasi. Ini bisa berfungsi seperti pintasan, atau seperti asosiasi file Windows. Maksudnya dapat menentukan nama aplikasi untuk memulai, tetapi tidak harus. Itu juga dapat menentukan tindakan yang akan dilakukan (mis. "Buka aktivitas utama Anda", "lihat URL ini", "buat entri kalender") dan jenis objek MIME yang akan ditindaklanjuti (mis. Benda yang ingin Anda lihat memiliki tipe image / jpeg). Beberapa nama tindakan khusus untuk aplikasi tertentu, tetapi banyak yang distandarisasi oleh Android untuk memungkinkan aplikasi berinteraksi.
Filter maksud dan aplikasi komunikasi
Setiap aplikasi menentukan filter maksud untuk mengatakan tindakan apa yang dapat dilakukan. misalnya aplikasi penampil gambar akan mendaftarkan filter maksud untuk "lihat URL ini" di mana jenis MIME adalah "gambar / *"; browser web akan mendaftarkan filter maksud untuk "lihat URL ini" di mana skema URL adalah "http" atau "https". Agar dapat berbagi sesuatu, aplikasi mendaftarkan filter maksud untuk maksud "kirim", baik dengan jenis tertentu (misalnya jika hanya dapat berbagi foto), atau untuk jenis apa pun.
Aplikasi konten
Aplikasi yang ingin berbagi beberapa konten menciptakan maksud dengan tindakan "berbagi" dan URL yang menunjuk ke konten untuk dibagikan. (Ini sering merupakan URL "sementara" yang memberikan akses sementara aplikasi penerima ke file di penyimpanan pribadi aplikasi konten, atau ke aliran yang dihasilkan oleh aplikasi konten.) Itu tidak menentukan nama aplikasi untuk menangani maksud. Kemudian, itu memberikan maksud itu ke kerangka Android dan meminta Android untuk menampilkan dialog pemilih . Android membandingkan maksud dengan filter maksud dari semua aplikasi yang diinstal, dan membuat daftar dan menunjukkannya kepada pengguna. Ketika pengguna memilih aplikasi tertentu, Android memulai aplikasi itu dan memberikannya maksud. Aplikasi menggunakan URL untuk mendapatkan konten dari aplikasi asli.
Baru di Marshmallow: Berbagi Langsung
Di Marshmallow, ada mekanisme lain yang disebut Direct Share . Ini melengkapi mekanisme niat sehingga Anda dapat memilih orang atau grup untuk dibagikan langsung dari dialog pemilih, melewatkan langkah ekstra "kepada siapa Anda ingin mengirimkannya". Ini bekerja sedikit berbeda: aplikasi komunikasi harus menyediakan layanan. Ketika aplikasi dengan konten meminta pemilih, Android memulai layanan untuk setiap aplikasi yang relevan. Layanan mengembalikan daftar target berbagi yang relevan , dan Android mengumpulkan semua daftar yang terpisah ke dalam daftar yang ditampilkan dalam dialog.
sumber
Saya bukan dev, jadi saya hanya bisa memberikan penjelasan mentah: aplikasi menyatakan
Manifest
Mimetypes mana yang mereka pahami dan bersedia tanggapi dengan aksi berbagi. Untuk ini mereka mendefinisikan apa yang disebut "filter maksud", misalnya:Jadi, setiap kali Anda menekan tombol "bagikan", konten untuk dibagikan dievaluasi dan dicocokkan dengan aplikasi yang telah menyatakan kesediaan mereka untuk menerima format.
Sumber:
sumber