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 serangkaian skin emulator dan banyak lagi. 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 lainnya. 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 yang baru bagi developer di Android 3.0, termasuk fitur baru dan perubahan dalam 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. Kemudian, Anda dapat menggabungkan beberapa fragmen dalam satu aktivitas untuk membuat 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 beberapa aktivitas
  • Anda dapat menambahkan, menghapus, mengganti, dan menganimasikan fragmen di dalam aktivitas
  • Anda dapat menambahkan fragmen ke data sebelumnya yang dikelola oleh aktivitas, dengan mempertahankan status fragmen saat diubah dan memungkinkan pengguna menavigasi mundur melalui status yang berbeda
  • Dengan menyediakan 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.

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

Panel Tindakan

Bilah Tindakan adalah pengganti bilah judul tradisional di bagian atas jendela aktivitas. Kode ini menyertakan logo aplikasi di sudut 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 langsung muncul di Panel Tindakan. Jika tidak, item tersebut akan ditempatkan dalam menu tambahan, yang ditampilkan oleh ikon menu di sisi kanan Panel Tindakan.

  • Mengganti 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 tersebut muncul di Panel Tindakan.) Jika tidak ada cukup ruang di Panel Tindakan dan item muncul di menu tambahan, item 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 akan diberikan oleh 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 daftar drop-down untuk menavigasi fragmen
  • Sesuaikan Panel Tindakan dengan tema dan latar belakang

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

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

Papan klip sistem

Aplikasi kini dapat menyalin dan menempelkan data (lebih dari sekadar teks) ke dan dari papan klip seluruh sistem. Data yang terpotong bisa berupa teks biasa, URI, atau intent.

Dengan memberikan akses sistem ke data yang Anda inginkan agar disalin oleh pengguna, melalui penyedia konten, pengguna dapat menyalin konten 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, 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 dimuat sebelumnya dengan ClipData.Item yang Anda sediakan.

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

Anda kemudian 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 terpotong (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 salin dan tempel yang sederhana 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 sejenis 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 yang akan ditarik, View.DragShadowBuilder untuk memfasilitasi "bayangan" yang dilihat pengguna di bawah jari mereka saat menarik, dan Object yang dapat berbagi informasi tentang objek tarik dengan tampilan yang dapat menerima objek.

Untuk menerima objek tarik dalam View (menerima "penurunan"), 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 tarik, 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 (yang ditentukan dalam XML dengan elemen <appwidget-provider>) juga mendukung dua kolom baru: autoAdvanceViewId dan previewImage. Kolom autoAdvanceViewId memungkinkan Anda menentukan ID tampilan subtampilan widget aplikasi yang harus dimajukan secara otomatis oleh host widget aplikasi. Kolom previewImage menentukan pratinjau tampilan widget aplikasi dan ditampilkan kepada pengguna dari alat pilih widget. Jika kolom ini tidak tersedia, 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 "Widget Preview". Untuk membuat gambar pratinjau, luncurkan aplikasi ini, pilih widget aplikasi Anda dan atur tampilan gambar pratinjau yang diinginkan, 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, serta class Notification.Builder baru memungkinkan Anda membuat objek Notification dengan mudah.

Fitur baru ini meliputi:

  • Dukungan untuk ikon besar dalam notifikasi, menggunakan setLargeIcon(). Biasanya, 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 guna 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() untuk menginisialisasi 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 headset API

Android kini menyertakan API untuk aplikasi guna memverifikasi status perangkat profil Bluetooth A2DP dan headset yang terhubung. Misalnya, aplikasi dapat mengidentifikasi kapan headset Bluetooth terhubung untuk mendengarkan musik dan memberi tahu pengguna sebagaimana mestinya. 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 lemah.

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 objek apa pun (View, Drawable, Fragment, Object, atau lainnya). API ini memungkinkan Anda menentukan beberapa aspek animasi, seperti:

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

Anda dapat menentukan aspek animasi ini, dan lainnya, untuk nilai warna int, float, dan heksadesimal objek secara default. Artinya, jika sebuah 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, beri tahu sistem cara menghitung nilai untuk jenis tertentu, dengan mengimplementasikan 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 serta memproses data dengan logika Anda sendiri. ObjectAnimator adalah subclass dari ValueAnimator dan memungkinkan Anda menetapkan objek dan properti yang akan dianimasikan, dan menangani semua pekerjaan 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 mana pun 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 ganda untuk ListView dan GridView

    Mode CHOICE_MODE_MULTIPLE_MODAL baru untuk setChoiceMode() memungkinkan pengguna memilih beberapa item dari ListView atau GridView. Saat 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 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 tampilan, dan lainnya.

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

    Beberapa metode juga memiliki atribut XML terkait yang 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 yang dikombinasikan dengan framework animasi baru (yang dibahas di atas), Anda dapat dengan mudah menerapkan beberapa animasi menarik ke tampilan. Misalnya, untuk memutar tampilan pada sumbu y, 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 holografis baru

    Widget sistem standar dan tampilan keseluruhan telah dirancang ulang dan menggabungkan tema antarmuka pengguna "holografis" yang baru. Sistem akan menerapkan tema baru menggunakan sistem gaya dan tema standar.

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

    Untuk menerapkan tema holografik ke setiap aktivitas atau mewarisinya dalam definisi tema Anda sendiri, gunakan salah satu dari beberapa tema Theme.Holo baru. Jika aplikasi Anda kompatibel dengan versi Android yang 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 antartampilannya.

    • AdapterViewFlipper

      ViewAnimator sederhana yang menganimasikan antara dua tampilan atau lebih yang telah ditambahkan. Hanya satu turunan yang ditampilkan pada satu waktu. Jika diminta, kode ini dapat otomatis beralih di antara setiap turunan pada interval reguler.

    • 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 standar. Widget menampilkan kolom input serta tombol atas dan bawah untuk memilih angka. Menyentuh kolom input memungkinkan pengguna men-scroll nilai atau menyentuh lagi untuk langsung mengedit nilai saat ini. Selain itu, Anda juga dapat memetakan posisi ke string sehingga string yang terkait ditampilkan, bukan posisi indeks.

    • PopupMenu

      Menampilkan Menu di 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 menimpa 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 tampilan seperti rolodex.

Grafis

  • Grafis 2D yang dipercepat 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, tetapi hanya jika akselerasi hardware diaktifkan untuk hierarki tampilan. Jika akselerasi hardware dinonaktifkan, lapisan hardware akan 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 diupdate. Setiap update akan perlu merender ulang lapisan software, yang berpotensi menjadi lambat.

    Untuk 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 tingkat pengambilan frame.

  • Dukungan tekstur untuk streaming gambar

    SurfaceTexture baru memungkinkan Anda mengambil aliran gambar sebagai tekstur OpenGL ES. Dengan memanggil setPreviewTexture() untuk instance Camera, Anda dapat menentukan SurfaceTexture 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 segala 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 di seluruh perangkat.

  • Manajemen hak digital (DRM)

    Framework pengelolaan hak digital (DRM) yang dapat diperluas baru untuk memeriksa dan menegakkan hak digital. Hal ini diimplementasikan 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 plugin DRM guna menangani pengelolaan dan dekripsi hak untuk berbagai skema DRM.

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

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

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

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

Dukungan keyboard

  • Dukungan untuk pengubah Control, Meta, Caps Lock, Num Lock, dan Scroll Lock. Untuk 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 fitur potong, salin, tempel, dan pilih semua berbasis keyboard, menggunakan kombinasi tombol Control+X, Control+C, Control+V, dan Control+A. Fitur ini juga mendukung pemilihan teks berbasis keyboard dan PageUp/PageDown, Home/End.
  • 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 menerapkan onKeyShortcut(). Framework 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 input pengujian.

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 secara bersamaan.

Peristiwa sentuh terpisah diaktifkan secara default jika 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 kelompok tampilan tertentu dan di seluruh jendela.

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

    Dengan cara ini, tampilan turunan dalam tata letak linear tidak dapat membagi 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>
    

    Saat 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 bersamaan dengan aktivitas. Hal ini tidak memengaruhi apakah tampilan di dalam aktivitas dapat memisahkan peristiwa sentuh—secara default, aktivitas masih dapat membagi peristiwa sentuh di seluruh tampilan.

    Untuk 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 sekaligus tetap memungkinkan pengguna melakukan zoom dengan gestur jari (setBuiltInZoomControls() harus disetel 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. Tindakan ini berguna untuk mengurangi traffic jaringan atau CPU yang tidak perlu saat WebView tidak berada di latar depan.
    • Callback 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 pada 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 untuk 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 didefinisikan 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 streaming JSON. API baru ini melengkapi class org.json, yang memanipulasi dokumen dalam memori.

Anda dapat membuat instance JsonReader dengan memanggil metode konstruktornya dan meneruskan InputStreamReader yang memasukkan string JSON. Kemudian, mulai baca objek dengan memanggil beginObject(), baca nama kunci dengan nextName(), baca nilai menggunakan metode sesuai jenisnya, seperti nextString() dan nextInt(), lalu lanjutkan selagi 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 menerima apa yang mereka terima. Mode penguraian yang longgar ini juga kompatibel dengan parser default org.json.

Konstanta fitur baru

Elemen manual <uses-feature> harus digunakan untuk menginformasikan entity eksternal (seperti Google Play) tentang rangkaian 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, ini menunjukkan bahwa aplikasi tersebut kompatibel dengan perangkat yang menawarkan layar sentuh yang diemulasi (atau yang lebih baik). Perangkat yang menawarkan layar sentuh yang diemulasi 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 dilakukan pada perangkat sentuh palsu (dan gestur multisentuh pasti tidak mungkin).

    Jika aplikasi tidak memerlukan gestur yang 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. Jadi, kecuali jika Anda benar-benar memerlukan layar sentuh, Anda harus menambahkan elemen <uses-feature> untuk palsutouch.

Izin baru

  • "android.permission.BIND_REMOTEVIEWS"

    Izin 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 Core Dalvik
    • Implementasi NIO yang baru dan jauh lebih cepat (library I/O modern)
    • Pesan pengecualian yang ditingkatkan
    • Perbaikan ketepatan dan performa secara menyeluruh

Laporan perbedaan API

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

API Level

Platform Android 3.0 menghadirkan versi API framework yang telah diupdate. Android 3.0 API diberikan 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, sebelum menginstal aplikasi.

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

Untuk informasi selengkapnya, baca Apa itu API Level?