API Android 3.0

Level API: 11

Untuk developer, platform Android 3.0 (HONEYCOMB) tersedia sebagai komponen yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library Android dan image sistem, serta sekumpulan skin emulator dan lain-lain. Platform yang dapat didownload tidak menyertakan library eksternal.

Untuk developer, platform Android 3.0 tersedia sebagai komponen yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library Android dan image sistem, serta sekumpulan skin emulator dan banyak lagi. Untuk mulai mengembangkan atau menguji Android 3.0, gunakan Android SDK Manager untuk mendownload platform ke SDK Anda.

Ringkasan API

Bagian di bawah ini memberikan ringkasan teknis tentang hal-hal baru bagi developer di Android 3.0, termasuk fitur baru dan perubahan pada API framework sejak versi sebelumnya.

Fragmen

Fragmen adalah komponen framework baru yang memungkinkan Anda memisahkan elemen aktivitas yang berbeda ke dalam modul mandiri yang menentukan UI dan siklus prosesnya sendiri. Untuk membuat fragmen, Anda harus memperluas class Fragment dan menerapkan beberapa metode callback siklus proses, mirip dengan Activity. Selanjutnya, Anda dapat menggabungkan beberapa fragmen dalam satu aktivitas untuk membangun UI multipanel tempat setiap panel mengelola siklus proses dan input penggunanya sendiri.

Anda juga dapat menggunakan fragmen tanpa menyediakan UI dan sebagai gantinya menggunakan fragmen sebagai pekerja untuk aktivitas, seperti untuk mengelola progres download yang hanya terjadi saat aktivitas berjalan.

Selain itu:

  • Fragmen bersifat mandiri dan Anda dapat menggunakannya kembali dalam berbagai aktivitas
  • Anda dapat menambahkan, menghapus, mengganti, dan menganimasikan fragmen di dalam aktivitas
  • Anda dapat menambahkan fragmen ke data sebelumnya yang dikelola oleh aktivitas, mempertahankan status fragmen saat diubah dan memungkinkan pengguna menavigasi mundur melalui berbagai status
  • Dengan memberikan tata letak alternatif, Anda dapat mencampur dan mencocokkan fragmen, berdasarkan ukuran dan orientasi layar
  • Fragmen memiliki akses langsung ke aktivitas penampungnya dan dapat menyumbangkan item ke Panel Tindakan aktivitas (dibahas berikutnya)

Untuk mengelola fragmen dalam aktivitas, Anda harus menggunakan FragmentManager, yang menyediakan beberapa API untuk berinteraksi dengan fragmen, seperti menemukan fragmen dalam aktivitas dan memunculkan fragmen dari data sebelumnya untuk memulihkan status sebelumnya.

Untuk melakukan transaksi, seperti menambahkan atau menghapus fragmen, Anda harus membuat FragmentTransaction. Anda kemudian dapat memanggil metode seperti add() remove(), atau replace(). Setelah menerapkan semua perubahan yang ingin dilakukan untuk transaksi, Anda harus memanggil commit() dan sistem akan menerapkan transaksi fragmen ke aktivitas tersebut.

Untuk informasi selengkapnya tentang penggunaan fragmen, baca dokumentasi Fragmen. Beberapa contoh juga tersedia dalam aplikasi Demo API.

Panel Tindakan

Panel Tindakan adalah pengganti panel judul tradisional di bagian atas jendela aktivitas. Menu ini menyertakan logo aplikasi di pojok kiri dan menyediakan antarmuka baru untuk item di Menu Opsi. Selain itu, Panel Tindakan memungkinkan Anda:

  • Tambahkan item menu langsung di Panel Tindakan—sebagai "item tindakan".

    Dalam deklarasi XML untuk item menu, sertakan atribut android:showAsAction dengan nilai "ifRoom". Jika ada cukup ruang, item menu akan muncul langsung di Panel Tindakan. Jika tidak, item akan ditempatkan dalam menu tambahan, yang diperlihatkan oleh ikon menu di sisi kanan Panel Tindakan.

  • Ganti item tindakan dengan widget (seperti kotak penelusuran)—membuat "tampilan tindakan".

    Pada deklarasi XML untuk item menu, tambahkan atribut android:actionViewLayout dengan resource tata letak atau atribut android:actionViewClass dengan nama class widget. (Anda juga harus mendeklarasikan atribut android:showAsAction agar item muncul di Panel Tindakan.) Jika tidak ada cukup ruang di Panel Tindakan dan item muncul di menu tambahan, item tersebut akan berperilaku seperti item menu biasa dan tidak menampilkan widget.

  • Menambahkan tindakan ke logo aplikasi dan menggantinya dengan logo kustom

    Logo aplikasi secara otomatis diberi ID android.R.id.home, yang dikirim sistem ke callback onOptionsItemSelected() aktivitas Anda saat disentuh. Cukup tanggapi ID ini dalam metode callback untuk melakukan tindakan seperti membuka aktivitas "beranda" aplikasi Anda.

    Untuk mengganti ikon dengan logo, tentukan logo aplikasi Anda dalam file manifes dengan atribut android:logo, lalu panggil setDisplayUseLogoEnabled(true) dalam aktivitas Anda.

  • Menambahkan breadcrumb untuk menavigasi mundur melalui data sebelumnya fragmen
  • Tambahkan tab atau menu drop-down untuk menjelajahi fragmen
  • Sesuaikan Panel Tindakan dengan tema dan latar belakang

Panel Tindakan adalah standar untuk semua aplikasi yang menggunakan tema holografik baru, yang juga merupakan standar saat Anda menetapkan android:minSdkVersion atau android:targetSdkVersion ke "11".

Untuk informasi selengkapnya tentang Panel Tindakan, baca dokumentasi Panel Tindakan. Beberapa contoh juga tersedia dalam aplikasi Demo API.

Papan klip sistem

Kini aplikasi dapat menyalin dan menempelkan data (selain teks) ke dan dari papan klip di seluruh sistem. Data yang diklip dapat berupa teks biasa, URI, atau intent.

Dengan memberikan akses kepada sistem ke data yang Anda inginkan untuk disalin oleh pengguna, melalui penyedia konten, pengguna dapat menyalin konten yang kompleks (seperti gambar atau struktur data) dari aplikasi Anda dan menempelnya ke aplikasi lain yang mendukung jenis konten tersebut.

Untuk mulai menggunakan papan klip, dapatkan objek ClipboardManager global dengan memanggil getSystemService(CLIPBOARD_SERVICE).

Untuk menyalin item ke papan klip, Anda harus membuat objek ClipData baru, yang menyimpan satu atau beberapa objek ClipData.Item, yang masing-masing menjelaskan satu entity. Untuk membuat objek ClipData yang hanya berisi satu ClipData.Item, Anda dapat menggunakan salah satu metode helper, seperti newPlainText(), newUri(), dan newIntent(), yang masing-masing menampilkan objek ClipData yang telah dimuat sebelumnya dengan ClipData.Item yang Anda sediakan.

Untuk menambahkan ClipData ke papan klip, teruskan ke setPrimaryClip() untuk instance ClipboardManager Anda.

Kemudian, Anda dapat membaca file dari papan klip (untuk menempelkannya) dengan memanggil getPrimaryClip() di ClipboardManager. Menangani ClipData yang Anda terima bisa menjadi rumit dan Anda harus memastikan bahwa Anda benar-benar dapat menangani jenis data di papan klip sebelum mencoba menempelkannya.

Papan klip hanya menyimpan satu bagian data yang diklip (objek ClipData) pada satu waktu, tetapi satu ClipData dapat berisi beberapa ClipData.Item.

Untuk mengetahui informasi selengkapnya, baca dokumentasi Salin dan Tempel. Anda juga dapat melihat implementasi simpel salin dan tempel dalam contoh Demo API dan implementasi yang lebih lengkap dalam contoh Note Pad.

Tarik lalu lepas

API baru menyederhanakan operasi tarik lalu lepas di antarmuka pengguna aplikasi Anda. Operasi tarik adalah transfer beberapa jenis data—yang dibawa dalam objek ClipData—dari satu tempat ke tempat lain. Titik awal dan akhir untuk operasi tarik adalah View, sehingga API yang langsung menangani operasi tarik lalu lepas berada di class View.

Operasi tarik lalu lepas memiliki siklus proses yang ditentukan oleh beberapa tindakan tarik—masing-masing ditentukan oleh objek DragEvent—seperti ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED, dan ACTION_DROP. Setiap tampilan yang ingin berpartisipasi dalam operasi tarik dapat memproses tindakan ini.

Untuk mulai menarik konten dalam aktivitas Anda, panggil startDrag() pada View yang menyediakan objek ClipData yang mewakili data untuk ditarik, View.DragShadowBuilder untuk memfasilitasi "bayangan" yang dilihat pengguna di bawah jari mereka saat menarik, dan Object yang dapat membagikan informasi tentang objek tarik dengan tampilan yang dapat menerima objek.

Untuk menerima objek tarik dalam View (menerima "drop"), daftarkan tampilan dengan OnDragListener dengan memanggil setOnDragListener(). Saat peristiwa tarik terjadi pada tampilan, sistem akan memanggil onDrag() untuk OnDragListener, yang menerima DragEvent yang menjelaskan jenis tindakan tarik yang telah terjadi (seperti ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED, dan ACTION_DROP). Selama penarikan, sistem berulang kali memanggil onDrag() untuk tampilan di bawah tarik, untuk mengirimkan aliran peristiwa tarik. Tampilan penerima dapat menanyakan jenis peristiwa yang dikirim ke onDragEvent() dengan memanggil getAction() di DragEvent.

Catatan: Meskipun peristiwa tarik dapat membawa objek ClipData, peristiwa ini tidak terkait dengan papan klip sistem. Operasi tarik lalu lepas tidak boleh menempatkan data yang ditarik ke papan klip sistem.

Untuk informasi selengkapnya, baca dokumentasi Menarik dan Melepaskan. Anda juga dapat melihat implementasi tarik lalu lepas di aplikasi Demo API dan aplikasi Honeycomb Gallery.

Widget aplikasi

Android 3.0 mendukung beberapa class widget baru untuk widget aplikasi yang lebih interaktif di Layar utama pengguna, termasuk: GridView, ListView, StackView, ViewFlipper, dan AdapterViewFlipper.

Yang lebih penting, Anda dapat menggunakan RemoteViewsService baru untuk membuat widget aplikasi dengan koleksi, menggunakan widget seperti GridView, ListView, dan StackView yang didukung oleh data jarak jauh, seperti dari penyedia konten.

Class AppWidgetProviderInfo (ditentukan dalam XML dengan elemen <appwidget-provider>) juga mendukung dua kolom baru: autoAdvanceViewId dan previewImage. Kolom autoAdvanceViewId memungkinkan Anda menentukan ID tampilan sub-tampilan widget aplikasi yang harus maju otomatis oleh host widget aplikasi. Kolom previewImage menentukan pratinjau tampilan widget aplikasi dan ditampilkan kepada pengguna dari pemilih widget. Jika kolom ini tidak disediakan, ikon widget aplikasi akan digunakan untuk pratinjau.

Guna membantu membuat gambar pratinjau untuk widget aplikasi Anda (yang akan ditentukan di kolom previewImage), Android emulator menyertakan aplikasi bernama "Pratinjau Widget". Untuk membuat gambar pratinjau, luncurkan aplikasi ini, pilih widget aplikasi untuk aplikasi Anda, dan atur tampilan gambar pratinjau yang Anda inginkan, lalu simpan dan tempatkan di resource drawable aplikasi Anda.

Anda dapat melihat implementasi fitur widget aplikasi baru di aplikasi Widget Aplikasi StackView dan Widget Daftar Cuaca.

Notifikasi bilah status

Notification API telah diperluas untuk mendukung lebih banyak notifikasi status bar yang kaya konten, ditambah class Notification.Builder baru memungkinkan Anda membuat objek Notification dengan mudah.

Fitur baru ini meliputi:

  • Dukungan untuk ikon besar dalam notifikasi, menggunakan setLargeIcon(). Hal ini biasanya agar aplikasi sosial menampilkan foto kontak orang yang merupakan sumber notifikasi atau agar aplikasi media menampilkan thumbnail album.
  • Dukungan untuk tata letak kustom di ticker status bar, menggunakan setTicker().
  • Dukungan untuk tata letak notifikasi kustom agar menyertakan tombol dengan PendingIntent, untuk widget notifikasi yang lebih interaktif. Misalnya, notifikasi dapat mengontrol pemutaran musik tanpa memulai aktivitas.

Loader konten

API framework baru memfasilitasi pemuatan data asinkron menggunakan class Loader. Anda dapat menggunakannya bersama komponen UI seperti tampilan dan fragmen untuk memuat data secara dinamis dari thread pekerja. Subclass CursorLoader dirancang khusus untuk membantu Anda melakukannya untuk data yang didukung oleh ContentProvider.

Anda hanya perlu mengimplementasikan antarmuka LoaderCallbacks untuk menerima callback saat loader baru diminta atau data telah berubah, lalu memanggil initLoader() guna melakukan inisialisasi loader untuk aktivitas atau fragmen Anda.

Untuk informasi selengkapnya, baca dokumentasi Loader. Anda juga dapat melihat kode contoh menggunakan loader dalam contoh LoaderCursor dan LoaderThrottle.

Bluetooth A2DP dan API headset

Android kini menyertakan API untuk aplikasi guna memverifikasi status perangkat Bluetooth A2DP dan profil headset yang terhubung. Misalnya, aplikasi dapat mengidentifikasi saat headset Bluetooth terhubung untuk mendengarkan musik dan memberi tahu pengguna yang sesuai. Aplikasi juga dapat menerima siaran untuk perintah AT khusus vendor dan memberi tahu pengguna tentang status perangkat yang terhubung, seperti saat baterai perangkat yang terhubung rendah.

Anda dapat menginisialisasi masing-masing BluetoothProfile dengan memanggil getProfileProxy() dengan konstanta profil A2DP atau HEADSET dan BluetoothProfile.ServiceListener untuk menerima callback saat klien Bluetooth terhubung atau terputus.

Framework animasi

Framework animasi fleksibel yang baru memungkinkan Anda menganimasikan properti arbitrer dari objek apa pun (View, Drawable, Fragment, Object, atau lainnya). Class ini memungkinkan Anda menentukan beberapa aspek animasi, seperti:

  • Durasi
  • Jumlah dan perilaku berulang
  • Jenis interpolasi waktu
  • Animator menyetel untuk memutar animasi secara bersamaan, berurutan, atau setelah penundaan yang ditentukan
  • Penundaan refresh frame

Anda dapat menentukan aspek animasi ini, dan lainnya, untuk nilai warna int, float, dan heksadesimal objek, secara default. Artinya, jika objek memiliki kolom properti untuk salah satu jenis ini, Anda dapat mengubah nilainya dari waktu ke waktu untuk memengaruhi animasi. Untuk menganimasikan jenis nilai lainnya, Anda memberi tahu sistem cara menghitung nilai untuk jenis tertentu, dengan menerapkan antarmuka TypeEvaluator.

Ada dua animator yang dapat Anda gunakan untuk menganimasikan nilai properti: ValueAnimator dan ObjectAnimator. ValueAnimator menghitung nilai animasi, tetapi tidak mengetahui objek atau properti tertentu yang dianimasikan sebagai hasilnya. Library ini hanya melakukan penghitungan, dan Anda harus memproses update dan memproses data dengan logika Anda sendiri. ObjectAnimator adalah subclass dari ValueAnimator dan memungkinkan Anda menetapkan objek dan properti yang akan dianimasikan, serta menangani semua tugas animasi. Artinya, Anda memberi ObjectAnimator objek yang akan dianimasikan, properti objek yang akan berubah dari waktu ke waktu, dan kumpulan nilai yang akan diterapkan ke properti dari waktu ke waktu, lalu memulai animasi.

Selain itu, class LayoutTransition memungkinkan animasi transisi otomatis untuk perubahan yang Anda buat pada tata letak aktivitas. Guna mengaktifkan transisi untuk sebagian tata letak, buat objek LayoutTransition dan tetapkan pada ViewGroup dengan memanggil setLayoutTransition(). Hal ini menyebabkan animasi default berjalan setiap kali item ditambahkan ke atau dihapus dari grup. Untuk menentukan animasi kustom, panggil setAnimator() pada LayoutTransition dan berikan Animator kustom, seperti ValueAnimator atau ObjectAnimator yang dibahas di atas.

Untuk informasi selengkapnya, lihat dokumentasi Animasi Properti. Anda juga dapat melihat beberapa contoh penggunaan API animasi pada aplikasi Demo API.

Framework UI yang diperluas

  • Pilihan pilihan ganda untuk ListView dan GridView

    Mode CHOICE_MODE_MULTIPLE_MODAL baru untuk setChoiceMode() memungkinkan pengguna memilih beberapa item dari ListView atau GridView. Jika digunakan bersama dengan Panel Tindakan, pengguna dapat memilih beberapa item, lalu memilih tindakan yang akan dilakukan dari daftar opsi di Panel Tindakan (yang telah berubah menjadi Mode Tindakan Multi-pilihan).

    Untuk mengaktifkan pilihan pilihan ganda, panggil setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) dan daftarkan MultiChoiceModeListener dengan setMultiChoiceModeListener().

    Saat pengguna menekan lama suatu item, Panel Tindakan akan beralih ke Mode Tindakan Multi-Pilihan. Sistem memberi tahu MultiChoiceModeListener saat item dipilih dengan memanggil onItemCheckedStateChanged().

    Untuk contoh pemilihan pilihan ganda, lihat class List15. java dalam aplikasi contoh Demo API.

  • API baru untuk mengubah tampilan

    API baru memungkinkan Anda menerapkan transformasi 2D dan 3D dengan mudah pada tampilan dalam tata letak aktivitas. Transformasi baru dapat dilakukan dengan sekumpulan properti objek yang menentukan posisi tata letak, orientasi, transparansi, dan lainnya.

    Metode baru untuk menyetel properti tampilan meliputi: setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha(), dan lainnya.

    Beberapa metode juga memiliki atribut XML yang sesuai dan dapat Anda tentukan dalam file tata letak, untuk menerapkan transformasi default. Atribut yang tersedia meliputi: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY, dan alpha.

    Dengan menggunakan beberapa properti tampilan baru ini bersama dengan framework animasi baru (dibahas di atas), Anda dapat dengan mudah menerapkan beberapa animasi menarik ke tampilan. Misalnya, untuk memutar tampilan pada sumbu y-nya, berikan ObjectAnimator dengan View, properti "rotasiY", serta nilai awal dan akhir:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • Tema holografik baru

    Widget sistem standar dan tampilan keseluruhan telah didesain ulang dan menyertakan tema antarmuka pengguna "holografik" yang baru. Sistem menerapkan tema baru menggunakan sistem gaya dan tema standar.

    Aplikasi apa pun yang menargetkan platform Android 3.0—dengan menyetel nilai android:minSdkVersion atau android:targetSdkVersion ke "11"—akan mewarisi tema holografik secara default. Namun, jika aplikasi Anda juga menerapkan temanya sendiri, tema Anda akan mengganti tema holografik, kecuali jika Anda memperbarui gaya untuk mewarisi tema holografik.

    Untuk menerapkan tema holografik pada aktivitas individual atau mewarisinya dalam definisi tema Anda sendiri, gunakan salah satu dari beberapa tema Theme.Holo baru. Jika aplikasi Anda kompatibel dengan versi Android lebih rendah dari 3.0 dan menerapkan tema kustom, Anda harus memilih tema berdasarkan versi platform.

  • Widget baru
    • AdapterViewAnimator

      Class dasar untuk AdapterView yang menjalankan animasi saat beralih di antara tampilannya.

    • AdapterViewFlipper

      ViewAnimator sederhana yang menganimasikan antara dua atau beberapa tampilan yang telah ditambahkan. Hanya satu turunan yang ditampilkan dalam satu waktu. Jika diminta, metode ini dapat otomatis beralih di antara setiap turunan pada interval yang teratur.

    • CalendarView

      Memungkinkan pengguna memilih tanggal dari kalender dengan menyentuh tanggal dan dapat men-scroll atau mengayunkan kalender ke tanggal yang diinginkan. Anda dapat mengonfigurasi rentang tanggal yang tersedia di widget.

    • ListPopupWindow

      Menambatkan dirinya sendiri ke tampilan host dan menampilkan daftar pilihan, misalnya untuk daftar saran saat mengetik ke dalam tampilan EditText.

    • NumberPicker

      Memungkinkan pengguna memilih angka dari rentang yang telah ditentukan. Widget menampilkan kolom input, serta tombol atas dan bawah untuk memilih angka. Menyentuh kolom input memungkinkan pengguna men-scroll nilai atau menyentuh lagi untuk mengedit nilai saat ini secara langsung. Hal ini juga memungkinkan Anda memetakan posisi ke string sehingga string yang sesuai ditampilkan, bukan posisi indeks.

    • PopupMenu

      Menampilkan Menu dalam jendela pop-up modal yang ditambatkan ke tampilan. Pop-up akan muncul di bawah tampilan anchor jika ada ruang, atau di atasnya jika tidak ada. Jika IME (keyboard virtual) terlihat, pop-up tidak akan tumpang tindih dengan IME sampai pengguna menyentuh menu.

    • SearchView

      Menyediakan kotak penelusuran yang dapat dikonfigurasi untuk mengirimkan kueri penelusuran ke aktivitas yang ditentukan dan menampilkan saran penelusuran (dengan cara yang sama seperti dialog penelusuran tradisional). Widget ini sangat berguna untuk menawarkan widget penelusuran di Panel Tindakan. Untuk informasi selengkapnya, lihat Membuat Antarmuka Penelusuran.

    • StackView

      Tampilan yang menampilkan turunannya dalam stack 3D dan memungkinkan pengguna menggeser melalui tampilan seperti rolodex.

Grafis

  • Grafis 2D dengan akselerasi hardware

    Kini Anda dapat mengaktifkan perender OpenGL untuk aplikasi dengan menyetel android:hardwareAccelerated="true" di elemen <application> elemen manifes atau untuk setiap elemen <activity>.

    Flag ini membantu aplikasi dengan membuatnya menggambar lebih cepat. Menghasilkan animasi yang lebih halus, scroll yang lebih lancar, serta performa dan respons yang lebih baik secara keseluruhan terhadap interaksi pengguna.

  • Melihat dukungan untuk lapisan hardware dan software

    Secara default, View tidak memiliki lapisan yang ditentukan. Anda dapat menentukan agar tampilan didukung oleh lapisan hardware atau software, yang ditentukan oleh nilai LAYER_TYPE_HARDWARE dan LAYER_TYPE_SOFTWARE, menggunakan atribut setLayerType() atau layerType.

    Lapisan hardware didukung oleh tekstur khusus hardware (umumnya Frame Buffer Objects atau FBO pada hardware OpenGL) dan menyebabkan tampilan dirender menggunakan pipeline rendering hardware Android, namun hanya jika akselerasi hardware diaktifkan untuk hierarki tampilan. Jika akselerasi hardware dinonaktifkan, lapisan hardware berperilaku persis seperti lapisan software.

    Lapisan software didukung oleh bitmap dan menyebabkan tampilan dirender menggunakan pipeline rendering software Android, meskipun akselerasi hardware diaktifkan. Lapisan software harus dihindari jika hierarki tampilan yang terpengaruh sering diperbarui. Setiap update akan perlu merender ulang lapisan software, yang berpotensi menjadi lambat.

    Untuk mengetahui informasi selengkapnya, lihat dokumentasi LAYER_TYPE_HARDWARE dan LAYER_TYPE_SOFTWARE.

  • Mesin grafis 3D Renderscript

    Renderscript adalah framework 3D runtime yang menyediakan API untuk membuat scene 3D serta bahasa shader khusus yang tidak bergantung platform untuk performa maksimal. Dengan Renderscript, Anda dapat mempercepat operasi grafis dan pemrosesan data. Renderscript adalah cara yang ideal untuk membuat efek 3D berperforma tinggi untuk aplikasi, wallpaper, carousel, dan banyak lagi.

    Untuk mengetahui informasi selengkapnya, lihat dokumentasi Rendering 3D dan Komputasi dengan Renderscript.

Media

  • Video time lapse

    Camcorder API kini mendukung kemampuan untuk merekam video time lapse. setCaptureRate() menetapkan kecepatan pengambilan frame.

  • Dukungan tekstur untuk streaming gambar

    SurfaceTexture baru memungkinkan Anda merekam aliran gambar sebagai tekstur OpenGL ES. Dengan memanggil setPreviewTexture() untuk instance Camera, Anda dapat menentukan SurfaceTexture yang akan digunakan untuk menggambar pemutaran video atau frame pratinjau dari kamera.

  • Live streaming HTTP

    Aplikasi kini dapat meneruskan URL playlist M3U ke framework media untuk memulai sesi Live streaming HTTP. Framework media mendukung sebagian besar spesifikasi Live streaming HTTP, termasuk kecepatan bit adaptif. Lihat dokumen Format Media yang Didukung untuk informasi selengkapnya.

  • Data EXIF

    ExifInterface menyertakan kolom baru untuk bukaan foto, ISO, dan waktu eksposur.

  • Profil perekam video

    Metode hasProfile() baru dan beberapa profil kualitas video (seperti QUALITY_1080P, QUALITY_720P, QUALITY_CIF, dan lainnya) memungkinkan Anda menentukan opsi kualitas perekam video.

  • Transfer file media digital

    Platform ini menyertakan dukungan bawaan untuk Media/Picture Transfer Protocol (MTP/PTP) melalui USB, sehingga pengguna dapat dengan mudah mentransfer berbagai jenis file media antar-perangkat dan ke komputer host. Developer dapat memanfaatkan dukungan ini dengan membuat aplikasi yang memungkinkan pengguna membuat atau mengelola file multimedia yang mungkin ingin ditransfer atau dibagikan ke berbagai perangkat.

  • Manajemen hak digital (DRM)

    Framework pengelolaan hak digital (DRM) yang dapat diperluas yang baru untuk memeriksa dan menegakkan hak digital. Hal ini diterapkan dalam dua lapisan arsitektur:

    • API framework DRM, yang diekspos ke aplikasi dan dijalankan melalui VM Dalvik untuk aplikasi standar.
    • Pengelola DRM kode native yang mengimplementasikan API framework dan mengekspos antarmuka bagi plugin DRM guna menangani pengelolaan hak dan dekripsi untuk berbagai skema DRM.

    Untuk developer aplikasi, framework ini menawarkan API abstrak dan terpadu yang menyederhanakan pengelolaan konten yang dilindungi. API ini menyembunyikan kompleksitas operasi DRM dan memungkinkan mode operasi yang konsisten, baik untuk konten yang dilindungi maupun yang tidak dilindungi, serta di berbagai skema DRM.

    Untuk produsen perangkat, pemilik konten, dan penyedia media digital internet, API plugin framework DRM memberikan cara untuk menambahkan dukungan bagi skema DRM pilihan ke dalam sistem Android, untuk penerapan perlindungan konten yang aman.

    Rilis pratinjau tidak menyediakan plugin DRM native untuk memeriksa dan menegakkan hak digital. Namun, produsen perangkat dapat mengirimkan plugin DRM bersama perangkat mereka.

    Anda dapat menemukan semua API DRM dalam paket android.drm.

Dukungan keyboard

  • Dukungan untuk pengubah Control, Meta, Caps Lock, Num Lock, dan Scroll Lock. Untuk mengetahui informasi selengkapnya, lihat META_CTRL_ON dan kolom terkait.
  • Dukungan untuk keyboard bergaya desktop lengkap, termasuk dukungan untuk tombol seperti Escape, Home, End, Delete, dan lainnya. Anda dapat menentukan apakah peristiwa tombol berasal dari keyboard lengkap dengan membuat kueri getKeyboardType() dan memeriksa KeyCharacterMap.FULL
  • TextView kini mendukung potongan, salin, tempel, dan pilih semua berbasis keyboard, menggunakan kombinasi tombol Control+X, Control+C, Control+V, dan Control+A. API ini juga mendukung pemilihan PageUp/PageDown, Home/End, dan berbasis keyboard.
  • KeyEvent menambahkan beberapa metode baru untuk mempermudah pemeriksaan status pengubah kunci dengan benar dan konsisten. Lihat hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers().
  • Aplikasi dapat menerapkan pintasan keyboard kustom dengan membuat subclass Activity, Dialog, atau View dan mengimplementasikan onKeyShortcut(). Framework ini memanggil metode ini setiap kali kunci digabungkan dengan tombol Control. Saat membuat Menu Opsi, Anda dapat mendaftarkan pintasan keyboard dengan menetapkan atribut android:alphabeticShortcut atau android:numericShortcut untuk setiap elemen <item> (atau dengan setShortcut()).
  • Android 3.0 menyertakan perangkat "keyboard virtual" baru dengan ID KeyCharacterMap.VIRTUAL_KEYBOARD. Keyboard virtual memiliki peta tombol AS gaya desktop yang berguna untuk menyintesis peristiwa tombol untuk menguji input.

Peristiwa sentuh terpisah

Sebelumnya, hanya satu tampilan yang dapat menerima peristiwa sentuh pada satu waktu. Android 3.0 menambahkan dukungan untuk memisahkan peristiwa sentuh di seluruh tampilan dan bahkan jendela, sehingga tampilan yang berbeda dapat menerima peristiwa sentuh simultan.

Peristiwa sentuh pemisahan diaktifkan secara default saat aplikasi menargetkan Android 3.0. Artinya, jika aplikasi telah menetapkan nilai atribut android:minSdkVersion atau android:targetSdkVersion ke "11".

Namun, properti berikut memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh tampilan dalam grup tampilan tertentu dan di seluruh jendela.

  • Atribut android:splitMotionEvents untuk grup tampilan memungkinkan Anda menonaktifkan peristiwa sentuh terpisah yang terjadi di antara tampilan turunan dalam tata letak. Misalnya:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    Dengan cara ini, tampilan turunan di tata letak linear tidak dapat memisahkan peristiwa sentuh—hanya satu tampilan yang dapat menerima peristiwa sentuh dalam satu waktu.

  • Properti gaya android:windowEnableSplitTouch memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh jendela, dengan menerapkannya ke tema untuk aktivitas atau seluruh aplikasi. Misalnya:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    Ketika tema ini diterapkan ke <activity> atau <application>, hanya peristiwa sentuh dalam jendela aktivitas saat ini yang diterima. Misalnya, dengan menonaktifkan peristiwa sentuh terpisah di seluruh jendela, kolom sistem tidak dapat menerima peristiwa sentuh secara bersamaan dengan aktivitas. Hal ini tidak memengaruhi apakah tampilan dalam aktivitas dapat memisahkan peristiwa sentuh—secara default, aktivitas masih dapat membagi peristiwa sentuh di seluruh tampilan.

    Untuk mengetahui informasi selengkapnya tentang cara membuat tema, baca Menerapkan Gaya dan Tema.

WebKit

  • Class WebViewFragment baru untuk membuat fragmen yang terdiri dari WebView.
  • Metode WebSettings baru:
    • setDisplayZoomControls() memungkinkan Anda menyembunyikan kontrol zoom di layar sambil tetap mengizinkan pengguna melakukan zoom dengan gestur jari (setBuiltInZoomControls() harus ditetapkan true).
    • Metode WebSettings baru, setEnableSmoothTransition(), memungkinkan Anda mengaktifkan transisi yang lancar saat menggeser dan melakukan zoom. Jika diaktifkan, WebView akan memilih solusi untuk memaksimalkan performa (misalnya, konten WebView mungkin tidak diperbarui selama transisi).
  • Metode WebView baru:
    • onPause(), untuk menjeda pemrosesan apa pun yang terkait dengan WebView saat disembunyikan. Hal ini berguna untuk mengurangi traffic CPU atau jaringan yang tidak perlu saat WebView tidak ada di latar depan.
    • onResume(), untuk melanjutkan pemrosesan yang terkait dengan WebView, yang dijeda selama onPause().
    • saveWebArchive() memungkinkan Anda menyimpan tampilan saat ini sebagai arsip web di perangkat.
    • showFindDialog() memulai penelusuran teks di tampilan saat ini.

Browser

Aplikasi Browser menambahkan fitur berikut untuk mendukung aplikasi web:

  • Perekaman media

    Seperti yang ditetapkan oleh spesifikasi HTML Media Capture, Browser memungkinkan aplikasi web mengakses kemampuan perekaman audio, gambar, dan video dari perangkat. Misalnya, HTML berikut memberikan input bagi pengguna untuk mengambil foto yang akan diupload:

    <input type="file" accept="image/*;capture=camera" />
    

    Atau dengan mengecualikan parameter capture=camera, pengguna dapat memilih untuk mengambil gambar baru dengan kamera atau memilih gambar dari perangkat (seperti dari aplikasi Galeri).

  • Orientasi Perangkat

    Seperti yang ditetapkan oleh spesifikasi Peristiwa Orientasi Perangkat, Browser memungkinkan aplikasi web memproses peristiwa DOM yang memberikan informasi tentang orientasi fisik dan gerakan perangkat.

    Orientasi perangkat dinyatakan dengan sumbu x, y, dan z, dalam derajat dan gerakan dinyatakan dengan data percepatan dan laju rotasi. Halaman web dapat mendaftar peristiwa orientasi dengan memanggil window.addEventListener dengan jenis peristiwa "deviceorientation" dan mendaftar untuk peristiwa gerakan dengan mendaftarkan jenis peristiwa "devicemotion".

  • Transformasi 3D CSS

    Seperti yang ditetapkan oleh spesifikasi Modul Transformasi 3D CSS, Browser memungkinkan elemen yang dirender oleh CSS diubah dalam tiga dimensi.

Utilitas JSON

Class baru, JsonReader dan JsonWriter, membantu Anda membaca dan menulis aliran JSON. API baru melengkapi class org.json, yang memanipulasi dokumen dalam memori.

Anda dapat membuat instance JsonReader dengan memanggil metode konstruktornya dan meneruskan InputStreamReader yang memberi feed string JSON. Kemudian, mulai baca objek dengan memanggil beginObject(), baca nama kunci dengan nextName(), baca nilai menggunakan metode sesuai dengan jenisnya, seperti nextString() dan nextInt(), lalu lanjutkan selama hasNext() bernilai benar (true).

Anda dapat membuat instance JsonWriter dengan memanggil konstruktornya dan meneruskan OutputStreamWriter yang sesuai. Kemudian, tulis data JSON dengan cara yang mirip dengan pembaca, menggunakan name() untuk menambahkan nama properti dan metode value() yang sesuai untuk menambahkan nilai masing-masing.

Class ini bersifat ketat secara default. Metode setLenient() di setiap class mengonfigurasinya agar lebih bebas dalam hal yang mereka terima. Mode penguraian yang longgar ini juga kompatibel dengan parser default org.json.

Konstanta fitur baru

Elemen <uses-feature> harus digunakan untuk menginformasikan entity eksternal (seperti Google Play) tentang kumpulan fitur hardware dan software yang diperlukan aplikasi Anda. Dalam rilis ini, Android menambahkan konstanta baru berikut yang dapat dideklarasikan aplikasi dengan elemen ini:

  • "android.hardware.faketouch"

    Jika dideklarasikan, hal ini menunjukkan bahwa aplikasi tersebut kompatibel dengan perangkat yang menawarkan layar sentuh yang diemulasi (atau yang lebih baik). Perangkat yang menawarkan layar sentuh yang diemulasikan menyediakan sistem input pengguna yang dapat mengemulasi subset kemampuan layar sentuh. Contoh sistem input semacam ini adalah mouse atau remote control yang menggerakkan kursor pada layar. Sistem input tersebut mendukung peristiwa sentuh dasar seperti klik ke bawah, klik ke atas, dan tarik. Namun, jenis input yang lebih rumit (seperti gestur, ayunkan jari, dll.) mungkin lebih sulit atau tidak mungkin di perangkat sentuh palsu (dan gestur multisentuh pasti tidak mungkin dilakukan).

    Jika aplikasi Anda tidak memerlukan gestur rumit dan Anda tidak ingin aplikasi difilter dari perangkat dengan layar sentuh yang diemulasi, Anda harus mendeklarasikan "android.hardware.faketouch" dengan elemen <uses-feature>. Dengan cara ini, aplikasi Anda akan tersedia untuk sebagian besar jenis perangkat, termasuk perangkat yang hanya menyediakan input layar sentuh yang diemulasi.

    Semua perangkat yang menyertakan layar sentuh juga mendukung "android.hardware.faketouch", karena kemampuan layar sentuh adalah superset dari kemampuan palsutouch. Oleh karena itu, kecuali jika Anda benar-benar memerlukan layar sentuh, Anda harus menambahkan elemen <uses-feature> untuk palsutouch.

Izin baru

  • "android.permission.BIND_REMOTEVIEWS"

    Hal ini harus dideklarasikan sebagai izin yang diperlukan dalam elemen manifes <service> untuk implementasi RemoteViewsService. Misalnya, saat membuat Widget Aplikasi yang menggunakan RemoteViewsService untuk mengisi tampilan koleksi, entri manifes mungkin terlihat seperti ini:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

Teknologi platform baru

  • Penyimpanan
    • dukungan sistem file ext4 untuk mengaktifkan penyimpanan eMMC {i>onboard<i}.
    • FUSE sistem file untuk mendukung perangkat MTP.
    • Dukungan mode host USB untuk mendukung keyboard dan hub USB.
    • Dukungan untuk MTP/PTP
  • Kernel Linux
    • Diupgrade ke versi 2.6.36
  • VM Dalvik
    • Kode baru untuk mendukung dan mengoptimalkan SMP
    • Berbagai peningkatan pada infrastruktur JIT
    • Peningkatan pembersih sampah memori:
      • Sesuai untuk SMP
      • Dukungan untuk ukuran heap yang lebih besar
      • Penanganan terpadu untuk bitmap dan buffering byte
  • Library Inti Dalvik
    • Implementasi NIO baru yang jauh lebih cepat (library I/O modern)
    • Pesan pengecualian yang ditingkatkan
    • Perbaikan ketepatan dan performa secara keseluruhan

Laporan perbedaan API

Untuk melihat tampilan mendetail semua perubahan API di Android 3.0 (API Level 11), lihat Laporan Perbedaan API.

API Level

Platform Android 3.0 menghadirkan versi yang telah diupdate dari API framework. Android 3.0 API diberi ID bilangan bulat — 11 — yang disimpan dalam sistem itu sendiri. ID ini, yang disebut "API Level", memungkinkan sistem menentukan dengan benar apakah aplikasi kompatibel dengan sistem tersebut, sebelum menginstal aplikasi.

Untuk menggunakan API yang diperkenalkan di Android 3.0 di aplikasi, Anda perlu mengompilasi aplikasi terhadap library Android yang disediakan di platform Android 3.0 SDK. Bergantung pada kebutuhan, Anda mungkin juga perlu menambahkan atribut android:minSdkVersion="11" ke elemen <uses-sdk> dalam manifes aplikasi. Jika aplikasi Anda dirancang hanya untuk berjalan di Android 2.3 dan yang lebih tinggi, mendeklarasikan atribut ini akan mencegah penginstalan aplikasi pada versi platform sebelumnya.

Untuk mengetahui informasi selengkapnya, baca Apa itu API Level?