Selamat datang di Pratinjau Developer Android 12. Beri kami masukan lebih awal dan sering, serta bantu kami menjadikan Android 12 sebagai rilis terbaik!

API terpadu untuk menerima konten

Berikan ikon masukan Kami ingin mendengar masukan dari Anda tentang API terpadu yang baru. Ikuti survei singkat untuk menyampaikan opini Anda. Secara khusus, beri tahu kami kasus penggunaan di aplikasi Anda yang terpengaruh oleh perubahan ini.

Gambar 1. API terpadu menyediakan satu tempat untuk menangani konten yang masuk dengan mengabaikan mekanisme UI tertentu, seperti menempelkan dari menu tekan lama atau menggunakan fitur tarik lalu lepas.

Pengguna menyukai gambar, video, dan konten ekspresif lainnya, tetapi menyisipkan dan memindahkan konten ini di aplikasi tidak selalu mudah. Untuk memudahkan aplikasi Anda menerima konten lengkap, ada API terpadu baru yang memungkinkan Anda menerima konten dari sumber mana pun: papan klip, keyboard, atau tarik lalu lepas.

Anda dapat melampirkan antarmuka baru, OnReceiveContentListener, ke komponen UI dan mendapatkan callback saat konten disisipkan melalui mekanisme apa pun. Callback menjadi satu tempat bagi kode Anda untuk menangani penerimaan semua konten, dari teks biasa dan gaya ke markup, gambar, video, file audio, dan lainnya.

Untuk kompatibilitas dengan versi Android sebelumnya, API baru juga telah ditambahkan ke AndroidX (tersedia di Core 1.5.0-beta1 dan Appcompat 1.3.0-beta -01), dan sebaiknya Anda menggunakannya saat menerapkan fitur ini.

Ringkasan

Dengan API yang ada, setiap mekanisme UI—seperti menu tekan lama atau tarik lalu lepas—memiliki API yang sesuai. Artinya, Anda harus berintegrasi dengan setiap API secara terpisah, menambahkan kode serupa untuk setiap mekanisme yang menyisipkan konten:

Gambar 2. Sebelumnya, aplikasi Anda harus menerapkan API yang berbeda untuk setiap mekanisme UI untuk penyiapan konten.

API terpadu menggabungkan berbagai jalur kode dengan membuat satu API untuk diterapkan, sehingga Anda dapat berfokus pada logika khusus aplikasi dan memungkinkan platform menangani logika yang tersisa:

Gambar 3. API terpadu baru memungkinkan Anda mengimplementasikan satu API yang mendukung semua mekanisme UI.

Pendekatan ini juga berarti bahwa saat ada cara baru untuk menyisipkan konten yang ditambahkan ke platform, Anda tidak perlu membuat perubahan kode tambahan untuk mengaktifkan dukungan di aplikasi. Jika aplikasi perlu menerapkan penyesuaian penuh untuk kasus penggunaan tertentu, Anda masih dapat menggunakan API yang sudah ada dan akan tetap berfungsi dengan cara yang sama.

Implementasi

API baru adalah antarmuka pemroses dengan satu metode, OnReceiveContentListener. Untuk mendukung platform Android versi lama, sebaiknya gunakan antarmuka OnReceiveContentListener yang cocok di library AndroidX Core.

Untuk menggunakan API, mulai terapkan pemroses dengan menentukan jenis konten yang dapat ditangani oleh aplikasi Anda:

public class MyReceiver implements OnReceiveContentListener {
     public static final String[] MIME_TYPES = new String[] {"image/*", "video/*"};
     // ...

Setelah menentukan semua jenis MIME konten yang didukung oleh aplikasi, terapkan pemroses lainnya:

 public class MyReceiver implements OnReceiveContentListener {
     public static final String[] MIME_TYPES = new String[] {"image/*", "video/*"};

     @Override
     public ContentInfoCompat onReceiveContent(View view, ContentInfoCompat contentInfo) {
         Pair<ContentInfoCompat, ContentInfoCompat> split = contentInfo.partition(
                 item -> item.getUri() != null);
         ContentInfo uriContent = split.first;
         ContentInfo remaining = split.second;
         if (uriContent != null) {
             ClipData clip = uriContent.getClip();
             for (int i = 0; i < clip.getItemCount(); i++) {
                 Uri uri = clip.getItemAt(i).getUri();
                 // App-specific logic to handle the URI ...
             }
         }
         // Return anything that your app didn't handle. This preserves the default platform
         // behavior for text and anything else that you aren't implementing custom handling for.
         return remaining;
     }
 }

Jika aplikasi sudah mendukung berbagi dengan Intent, Anda dapat menggunakan kembali logika khusus aplikasi untuk menangani URI konten. Menampilkan data yang tersisa untuk mendelegasikan penanganan data tersebut ke platform.

Setelah mengimplementasikan pemroses, tetapkan pemroses dalam konstruktor elemen UI aplikasi Anda:

public class MyActivity extends Activity {
     @Override
     public void onCreate(Bundle savedInstanceState) {
         // ...

         AppCompatEditText myInput = findViewById(R.id.my_input);
         ViewCompat.setOnReceiveContentListener(myInput, MyReceiver.MIME_TYPES, new MyReceiver());
     }
}

Perbandingan dengan keyboard image API

Anda dapat menganggap API konten terpadu sebagai versi berikutnya dari API image keyboard yang sudah ada. API baru ini mendukung fungsi API image keyboard serta beberapa fitur tambahan:

Tindakan atau fitur Didukung oleh API image keyboard Didukung oleh API terpadu
Sisipkan dari keyboard Ya (API level 24 dan yang lebih tinggi) Ya (API level 24 dan yang lebih tinggi)
Sisipkan menggunakan Tempel dari menu tekan lama Tidak Ya
Sisipkan menggunakan tarik lalu lepas Tidak Ya (API level 24 dan yang lebih tinggi)