API Android 3.0

Level API: 11

Bagi pengembang, platform Android 3.0 (HONEYCOMB) tersedia sebagai file yang dapat didownload Android SDK untuk Android SDK. Platform yang dapat didownload berisi library dan sistem Android serta serangkaian skin emulator dan lain-lain. Platform yang dapat didownload tidak menyertakan library eksternal.

Untuk pengembang, platform Android 3.0 tersedia sebagai yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library dan image sistem Android, serta kumpulan skin emulator dan lainnya. Untuk memulai pengembangan atau pengujian terhadap Android 3.0, menggunakan Android SDK Manager untuk mendownload platform ke SDK Anda.

Ringkasan API

Bagian di bawah ini memberikan ringkasan teknis mengenai fitur baru untuk 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 menjadi 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 dengan setiap panel mengelola siklus proses dan input penggunanya sendiri.

Anda juga dapat menggunakan fragmen tanpa menyediakan UI dan menggunakan fragmen sebagai pekerja untuk aktivitas, seperti 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, mempertahankan status fragmen saat diubah dan memungkinkan pengguna menavigasi kembali melalui berbagai status
  • Dengan menyediakan tata letak alternatif, Anda dapat menggabungkan dan mencocokkan fragmen, berdasarkan ukuran dan orientasi layar
  • Fragmen memiliki akses langsung ke aktivitas penampungnya dan dapat menyumbangkan item ke Action Bar aktivitas (akan 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 Fragment. Beberapa contoh juga tersedia di aplikasi Demo API.

Panel Tindakan

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

  • Menambahkan 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 di menu tambahan, yang ditampilkan oleh ikon menu di sisi kanan Panel Tindakan.

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

    Dalam 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 Action Bar dan item muncul di menu tambahan, item tersebut akan berperilaku seperti item menu biasa dan tidak menampilkan widget.

  • Tambahkan tindakan ke logo aplikasi dan ganti dengan logo khusus

    Logo aplikasi secara otomatis ditetapkan ID android.R.id.home, yang dikirimkan sistem ke callback onOptionsItemSelected() aktivitas Anda saat disentuh. Cukup respons ID ini dalam callback Anda untuk melakukan tindakan seperti membuka "home" aplikasi Anda aktivitas 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 menavigasi fragmen
  • Menyesuaikan Panel Tindakan dengan tema dan latar belakang

Panel Tindakan adalah standar untuk semua aplikasi yang menggunakan tema holografis baru, yang juga 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 di aplikasi Demo API.

Clipboard sistem

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

Dengan memberikan akses sistem ke data yang ingin Anda salin oleh pengguna, melalui penyedia konten, pengguna dapat menyalin konten yang kompleks (seperti gambar atau struktur data) dari aplikasi Anda dan menempelkannya 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 perlu membuat objek ClipData baru, yang menyimpan satu atau beberapa ClipData.Item , masing-masing menggambarkan satu entitas. 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 berikan.

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() pada ClipboardManager. Menangani ClipData yang Anda terima dapat 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) dalam satu waktu, tetapi satu ClipData dapat berisi beberapa ClipData.Item.

Untuk informasi selengkapnya, baca artikel Menyalin lalu Tempelkan. Anda juga bisa melihat implementasi sederhana salin dan tempel di Demo API sampel dan implementasi yang lebih lengkap dalam contoh Note Pad.

Tarik lalu lepas

API baru menyederhanakan operasi tarik lalu lepas dalam 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 secara langsung menangani operasi tarik lalu lepas berada dalam 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 tarikan bisa memproses tindakan ini.

Untuk mulai menarik konten dalam aktivitas Anda, panggil startDrag() di 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 membagikan informasi tentang objek tarik dengan tampilan yang dapat menerima objek.

Untuk menerima objek tarik dalam View (terima "lepas"), daftarkan tampilan menggunakan OnDragListener dengan memanggil setOnDragListener(). Bila peristiwa tarik terjadi pada tampilan, metode sistem 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 penyeretan, sistem berulang kali memanggil onDrag() untuk tampilan di bawah penyeretan, untuk mengirimkan 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, hal ini tidak terkait dengan papan klip sistem. Tarik lalu lepas tidak boleh menempatkan data yang ditarik di papan klip sistem.

Untuk informasi selengkapnya, baca dokumentasi Menarik dan Melepas. Anda juga dapat melihat implementasi tarik lalu lepas pada aplikasi API Demos dan Honeycomb Gallery aplikasi.

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 aplikasi widget 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 properti subtampilan widget aplikasi yang seharusnya dimaju 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 disediakan, ikon widget aplikasi akan digunakan untuk pratinjau.

Untuk membantu membuat gambar pratinjau untuk widget aplikasi Anda (yang akan ditetapkan di kolom previewImage), emulator Android menyertakan aplikasi yang disebut "Widget Preview". Untuk membuat gambar pratinjau, luncurkan aplikasi ini, pilih untuk aplikasi Anda dan mengaturnya dengan cara yang Anda inginkan untuk menampilkan gambar pratinjau, lalu simpan dan menempatkannya dalam sumber daya drawable aplikasi Anda.

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

Notifikasi status bar

Notification API telah diperluas untuk mendukung status yang lebih kaya konten notifikasi batang, ditambah class Notification.Builder baru akan memudahkan Anda membuat objek Notification.

Fitur baru ini meliputi:

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

Loader konten

API framework baru memfasilitasi pemuatan data asinkron menggunakan class Loader. Anda dapat menggunakannya dalam kombinasi dengan 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.

Yang perlu Anda lakukan adalah mengimplementasikan antarmuka LoaderCallbacks untuk menerima callback saat loader baru diminta atau data telah berubah, lalu panggil initLoader() untuk melakukan inisialisasi loader untuk aktivitas atau fragmen Anda.

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

API headset dan A2DP Bluetooth

Android kini menyertakan API untuk aplikasi guna memverifikasi status Bluetooth A2DP yang terhubung dan perangkat profil headset. Misalnya, aplikasi dapat mengidentifikasi saat headset Bluetooth terhubung untuk mendengarkan musik dan memberi tahu pengguna sebagaimana mestinya. Pendaftaran juga dapat menerima {i>broadcast <i}untuk perintah AT khusus vendor dan memberi tahu pengguna tentang status perangkat Anda, seperti saat baterai perangkat yang terhubung lemah.

Anda dapat menginisialisasi BluetoothProfile masing-masing 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 baru yang fleksibel memungkinkan Anda menganimasikan properti arbitrer dari objek apa pun (View, Drawable, Fragment, Object, atau apa pun). Fungsi ini memungkinkan Anda untuk mendefinisikan beberapa aspek sebuah animasi, seperti:

  • Durasi
  • Jumlah dan perilaku pengulangan
  • 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, ketika sebuah objek memiliki isian properti untuk salah satu tipe 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. Fungsi ini hanya melakukan penghitungan, dan Anda harus memproses pembaruan dan memproses data dengan logika Anda sendiri. ObjectAnimator adalah subclass dari ValueAnimator dan memungkinkan Anda menetapkan objek dan properti yang akan dianimasikan, dan 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. Untuk mengaktifkan transisi untuk bagian dari buka tata letak, buat objek LayoutTransition, lalu tetapkan 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() di LayoutTransition dan berikan Animator kustom, seperti ValueAnimator atau ObjectAnimator yang telah dibahas di atas.

Untuk informasi selengkapnya, lihat dokumentasi Animasi Properti. Anda dapat lihat juga beberapa contoh penggunaan API animasi dalam API Demos.

Framework UI yang diperluas

  • Pemilihan 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 di bersama dengan Bilah Tindakan, pengguna dapat memilih beberapa item dan kemudian memilih tindakan untuk dilakukan dari daftar opsi di Panel Tindakan (yang telah berubah menjadi Multi-pilihan Mode Tindakan).

    Untuk mengaktifkan pilihan multiple-choice, 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 akan memberi tahu MultiChoiceModeListener saat item dipilih dengan memanggil onItemCheckedStateChanged().

    Untuk contoh pilihan pilihan ganda, lihat Daftar15. Java dalam aplikasi contoh Demo API.

  • API baru untuk mengubah tampilan

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

    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 terkait yang bisa Anda tetapkan dalam tata letak untuk menerapkan transformasi default. Atribut yang tersedia meliputi: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY, dan alpha.

    Penggunaan beberapa properti tampilan baru ini bersama dengan framework animasi baru (yang dibahas di atas), Anda dapat dengan mudah menerapkan beberapa animasi keren ke tampilan Anda. Misalnya, untuk memutar tampilan pada sumbu y-nya, berikan ObjectAnimator dengan View, "rotationY" 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 didesain ulang dan menyertakan "holografis" tema antarmuka pengguna Anda. Sistem menerapkan tema baru menggunakan sistem gaya dan tema standar.

    Setiap aplikasi 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 holografis, kecuali jika Anda memperbarui gaya untuk mewarisi tema holografis.

    Untuk menerapkan tema holografis 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 berlaku Anda harus memilih tema berdasarkan platform versi.

  • Widget baru
    • AdapterViewAnimator

      Class dasar untuk AdapterView yang melakukan animasi saat beralih antara tampilannya.

    • AdapterViewFlipper

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

    • CalendarView

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

    • ListPopupWindow

      Mengaitkan dirinya ke tampilan host dan menampilkan daftar pilihan, seperti untuk daftar saran saat mengetik ke tampilan EditText.

    • NumberPicker

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

    • PopupMenu

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

    • SearchView

      Menyediakan kotak penelusuran yang dapat Anda konfigurasikan untuk mengirimkan kueri penelusuran ke aktivitas tertentu 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 anak-anaknya dalam tumpukan 3D dan memungkinkan pengguna untuk menggeser tampilan seperti {i>rolodex<i}.

Grafik

  • Grafis 2D dengan akselerasi hardware

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

    Penanda ini membantu aplikasi dengan membuat mereka menggambar lebih cepat. Ini menghasilkan animasi yang lebih halus, scroll yang lebih mulus, 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 bahwa tampilan didukung oleh lapisan hardware atau software, yang ditentukan oleh nilai LAYER_TYPE_HARDWARE dan LAYER_TYPE_SOFTWARE, menggunakan setLayerType() atau atribut layerType.

    Lapisan perangkat keras didukung oleh tekstur khusus perangkat keras (umumnya Objek Buffering Frame atau FBO pada hardware OpenGL) dan menyebabkan tampilan dirender menggunakan rendering hardware Android pipeline, tetapi hanya jika akselerasi hardware diaktifkan untuk hierarki tampilan. Jika akselerasi hardware dinonaktifkan, lapisan hardware akan berperilaku sama persis dengan lapisan software.

    Lapisan software didukung oleh bitmap dan menyebabkan tampilan dirender menggunakan antarmuka pipeline rendering software, meskipun jika akselerasi hardware diaktifkan. Lapisan software harus dihindari jika hierarki tampilan yang terpengaruh sering diperbarui. Setiap update perlu merender ulang lapisan perangkat lunak yang baru, yang mungkin akan 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 membangun adegan 3D juga sebagai bahasa shader khusus platform independen 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 lainnya.

    Untuk informasi selengkapnya, lihat Rendering 3D dan Komputasi dengan Renderscript-nya.

Media

  • Video time lapse

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

  • Dukungan tekstur untuk streaming gambar

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

  • Live streaming HTTP

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

  • Data EXIF

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

  • Profil camcorder

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

  • Transfer file media digital

    Platform ini menyertakan dukungan bawaan untuk Media/Picture Transfer Protocol (MTP/PTP) melalui USB, yang memungkinkan pengguna mentransfer jenis file media apa pun dengan mudah antarperangkat dan ke komputer host. Developer dapat membangun dukungan ini, membuat aplikasi yang memungkinkan pengguna membuat atau mengelola file multimedia yang mungkin ingin mereka transfer atau bagikan di seluruh perangkat.

  • Manajemen hak digital (DRM)

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

    • API framework DRM, yang diekspos ke aplikasi dan berjalan melalui Dalvik VM untuk aplikasi standar.
    • Pengelola DRM kode native yang mengimplementasikan API framework dan mengekspos antarmuka untuk DRM {i>plug-in<i} untuk menangani manajemen hak dan dekripsi untuk berbagai skema DRM.

    Untuk developer aplikasi, framework ini menawarkan API terpadu abstrak 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.

    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 penegakan perlindungan konten yang aman.

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

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

Dukungan keyboard

  • Dukungan untuk pengubah Kontrol, Meta, Caps Lock, Num Lock, dan Scroll Lock. Untuk informasi selengkapnya, lihat META_CTRL_ON dan kolom terkait.
  • Dukungan untuk keyboard gaya desktop lengkap, termasuk dukungan untuk tombol seperti Escape, Home, End, Delete, dan lainnya. Anda dapat menentukan apakah peristiwa tombol berasal dari keyboard penuh dengan membuat kueri getKeyboardType() dan memeriksa KeyCharacterMap.FULL
  • TextView kini mendukung fitur potong, salin, dan tempel berbasis keyboard tempel, dan pilih semua, menggunakan kombinasi tombol Control+X, Control+C, Control+V, dan Control+A. Fungsi ini juga mendukung PageUp/PageDown, Home/End, dan pemilihan teks berbasis keyboard.
  • KeyEvent menambahkan beberapa metode baru untuk mempermudah pemeriksaan kunci status pengubah secara 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 tombol 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 "keyboard virtual" baru perangkat dengan ID KeyCharacterMap.VIRTUAL_KEYBOARD. Keyboard virtual memiliki peta tombol AS bergaya desktop yang berguna untuk menyintesis peristiwa utama untuk menguji input.

Pisahkan peristiwa sentuh

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 serentak.

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

Namun, properti berikut memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh tampilan di dalam grup 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 tata letak. Contoh:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

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

  • Properti gaya android:windowEnableSplitTouch memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh jendela, dengan menerapkannya ke tema untuk aktivitas atau seluruh aplikasi. Contoh:
    <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, panel sistem tidak dapat menerima peristiwa sentuh secara bersamaan dengan aktivitas. Ini tidak memengaruhi apakah tampilan dalam aktivitas dapat memisahkan sentuhan peristiwa—secara default, aktivitas masih dapat memisahkan 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 mengizinkan pengguna melakukan zoom dengan gestur jari (setBuiltInZoomControls() harus disetel ke true).
    • Metode WebSettings baru, setEnableSmoothTransition(), memungkinkan Anda untuk memungkinkan transisi yang mulus saat menggeser dan memperbesar. Saat diaktifkan, WebView akan memilih solusi untuk memaksimalkan performa (misalnya, konten WebView mungkin tidak diperbarui selama transisi).
  • Metode WebView baru:
    • Callback onPause(), untuk menjeda pemrosesan yang terkait dengan WebView saat disembunyikan. Hal ini berguna untuk mengurangi traffic CPU atau jaringan yang tidak diperlukan 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:

  • Pengambilan media

    Seperti yang didefinisikan oleh HTML Media Capture spesifikasi, Browser memungkinkan aplikasi web mengakses perekaman audio, gambar, dan video kemampuan 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 ditentukan oleh Peristiwa Orientasi Perangkat browser memungkinkan aplikasi web mendengarkan kejadian DOM yang menyediakan informasi tentang orientasi fisik dan gerakan perangkat.

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

  • Transformasi 3D CSS

    Seperti yang didefinisikan oleh Transformasi 3D CSS lain, Browser memungkinkan elemen yang dirender oleh CSS diubah menjadi tiga dimensi kustom.

Utilitas JSON

Kelas 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 makan string JSON. Lalu mulai baca objek dengan memanggil beginObject(), baca nama kunci dengan nextName(), baca nilai menggunakan metode masing-masing dengan jenisnya, seperti nextString() dan nextInt(), dan terus melakukannya sementara hasNext() bernilai benar.

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

Class ini ketat secara default. setLenient() di setiap class mengonfigurasi mereka agar lebih liberal dalam hal apa yang diterima. Longgar ini mode penguraian juga kompatibel dengan parser default org.json.

Konstanta fitur baru

Elemen manifes <uses-feature> harus digunakan untuk memberi tahu entitas eksternal (seperti Google Play) tentang serangkaian fitur hardware dan software yang menjadi dependen dengan aplikasi Anda. Dalam rilis ini, Android menambahkan berikut konstanta baru yang dapat dideklarasikan aplikasi dengan elemen ini:

  • "android.hardware.faketouch"

    Bila dideklarasikan, ini menunjukkan bahwa aplikasi kompatibel dengan perangkat yang menawarkan layar sentuh yang diemulasikan (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 tersebut adalah mouse atau remote control yang menggerakkan kursor di layar. Sistem input tersebut mendukung peristiwa sentuh dasar seperti klik bawah, klik atas, dan tarik. Namun, tipe input yang lebih rumit (seperti gestur, fling, dll.) mungkin lebih sulit atau tidak mungkin dilakukan di perangkat faulttouch (dan gestur multisentuh jelas tidak mungkin).

    Jika aplikasi Anda 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 sejumlah besar jenis perangkat, termasuk 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 faketouch. Jadi, kecuali jika Anda benar-benar memerlukan layar sentuh, Anda harus menambahkan elemen <uses-feature> untuk faketouch.

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 akan 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 bawaan.
    • Sistem file FUSE untuk mendukung perangkat MTP.
    • Dukungan mode host USB untuk mendukung keyboard dan hub USB.
    • Dukungan untuk MTP/PTP
  • Kernel Linux
    • Diupgrade ke 2.6.36
  • VM Dalvik
    • Kode baru untuk mendukung dan mengoptimalkan SMP
    • Berbagai peningkatan pada infrastruktur JIT
    • Peningkatan pengumpulan sampah:
      • Disesuaikan untuk SMP
      • Dukungan untuk ukuran heap yang lebih besar
      • Penanganan terpadu untuk bitmap dan buffer byte
  • Library Inti Dalvik
    • Implementasi NIO yang baru dan jauh lebih cepat (library I/O modern)
    • Pesan pengecualian yang ditingkatkan
    • Perbaikan akurasi dan performa di seluruh bagian

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 diperbarui. Android 3.0 API diberi ID bilangan bulat — 11 — yang disimpan di dalam sistem itu sendiri. ID ini, yang disebut "API Level", memungkinkan sistem untuk menentukan dengan benar apakah suatu aplikasi kompatibel dengan sistem, sebelum menginstal aplikasi.

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

Untuk informasi selengkapnya, baca Apa yang dimaksud dengan API Tingkat?