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 eksternal library.

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 serangkaian skin emulator dan banyak lagi. 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 kerangka kerja baru yang memungkinkan Anda memisahkan elemen yang berbeda dari menjadi modul mandiri yang menentukan UI dan siklus prosesnya sendiri. Untuk membuat Anda harus memperluas class Fragment dan menerapkan beberapa siklus proses metode callback yang mirip dengan Activity. Anda kemudian dapat menggabungkan beberapa dalam satu aktivitas untuk membangun UI multipanel yang masing-masing mengelola input pengguna dan siklus prosesnya 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 bisa menambahkan fragmen ke data sebelumnya yang dikelola oleh aktivitas, yang mempertahankan status fragmen saat diubah dan memungkinkan pengguna untuk menavigasi mundur melalui berbagai negara bagian
  • Dengan memberikan tata letak alternatif, Anda dapat mencampur dan mencocokkan fragmen, pada orientasi dan ukuran 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, misalnya 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 Anda menerapkan perubahan yang ingin Anda lakukan untuk transaksi, Anda harus memanggil commit() dan sistem akan menerapkan transaksi fragmen ke melakukan aktivitas tersebut.

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

Panel Tindakan

Bilah Tindakan adalah pengganti bilah judul biasa di bagian atas jendela aktivitas. Ini mencakup logo aplikasi di pojok kiri dan menyediakan antarmuka baru untuk item di Menu Opsi. Selain itu, Panel Tindakan 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". Ketika tersedia cukup ruang, 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 suatu . (Anda juga harus mendeklarasikan atribut android:showAsAction sehingga item muncul di Panel Tindakan.) Jika tidak ada cukup ruang di Panel Tindakan dan item akan muncul di menu tambahan, berperilaku seperti item menu biasa dan tidak menampilkan widget.

  • Tambahkan tindakan ke logo aplikasi dan ganti dengan logo khusus

    Logo aplikasi akan otomatis diberi 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 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
  • Sesuaikan Panel Tindakan dengan tema dan latar belakang

Bilah 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 mengetahui informasi selengkapnya tentang Panel Tindakan, baca dokumentasi Panel Tindakan. Beberapa contoh juga tersedia di API Demos.

Clipboard sistem

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

Dengan menyediakan akses sistem ke data yang Anda inginkan 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 telah 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 perlu memastikan bahwa Anda benar-benar dapat menangani jenis data di {i>clipboard<i} sebelum mencoba menempelkannya.

Clipboard hanya menyimpan satu data yang terpotong (ClipData objek) pada 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. Sebuah {i>drag<i} (menarik) adalah transfer beberapa jenis data—yang dibawa dalam 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 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 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 mungkin menerima objek.

Untuk menerima objek tarik dalam View (menerima "drop"), 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 meminta 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 Menarik dan Melepaskan dokumentasi. 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 bagi pengguna Layar utama, 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. Tujuan Kolom previewImage menentukan pratinjau widget aplikasi terlihat dan ditampilkan kepada pengguna dari pemilih widget. Jika kolom ini bukan disediakan, ikon widget aplikasi akan digunakan untuk pratinjau.

Untuk membantu membuat gambar pratinjau bagi widget aplikasi Anda (yang akan ditentukan di kolom previewImage), Android emulator menyertakan sebuah aplikasi bernama "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 yang memudahkan Anda membuat objek Notification.

Fitur baru ini meliputi:

  • Dukungan untuk ikon besar dalam notifikasi, menggunakan setLargeIcon(). Ini biasanya untuk aplikasi sosial untuk 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 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.

Anda hanya perlu mengimplementasikan antarmuka LoaderCallbacks untuk menerima callback saat loader baru diminta atau data telah diubah, lalu panggil initLoader() untuk melakukan inisialisasi 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 A2DP atau HEADSET dan BluetoothProfile.ServiceListener untuk menerima ketika 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 int, float, dan heksadesimal objek nilai warna 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 yang dianimasikan sebagai hasilnya. Aplikasi ini hanya melakukan perhitungan, dan Anda harus mendengarkan 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, objek untuk properti objek berubah seiring waktu, dan serangkaian nilai yang akan diterapkan pada properti waktu, kemudian mulai animasinya.

Selain itu, class LayoutTransition memungkinkan transisi otomatis animasi 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 {i>default<i} animasi yang akan dijalankan setiap kali item ditambahkan ke atau dihapus dari grup. Untuk menentukan kustom animasi, panggil setAnimator() pada LayoutTransition dan sediakan 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 di API Demos.

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

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

    Jika pengguna menekan lama sebuah item, Panel Tindakan akan beralih ke Multi-pilihan Mode Tindakan. Sistem 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 dimungkinkan dengan serangkaian properti objek yang mendefinisikan posisi tata letak, orientasi, transparansi, dan banyak lagi.

    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.

    Aplikasi apa pun yang menargetkan platform Android 3.0—dengan menyetel android:minSdkVersion atau nilai android:targetSdkVersion menjadi "11"—mewarisi tema holografi secara default. Tetapi, jika aplikasi Anda juga menerapkan temanya sendiri, maka tema Anda akan menggantikan tema holografis, kecuali Anda memperbarui gaya untuk mewarisi tema holografis.

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

  • Widget baru
    • AdapterViewAnimator

      Class dasar untuk AdapterView yang menjalankan animasi saat beralih di 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, LLM dapat secara otomatis membalik antara setiap anak dengan interval teratur.

    • CalendarView

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

    • ListPopupWindow

      Menaruh dirinya sendiri ke tampilan host dan menampilkan daftar pilihan, seperti daftar saran saat mengetik dalam tampilan EditText.

    • NumberPicker

      Memungkinkan pengguna memilih angka dari rentang yang telah ditentukan. Widget ini menyajikan input serta tombol atas dan bawah untuk memilih angka. Menyentuh bidang {i>input<i} memungkinkan pengguna untuk scroll nilai atau sentuh 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 dikonfigurasikan untuk mengirimkan kueri penelusuran ke aktivitas dan menampilkan saran penelusuran (dengan cara yang sama seperti dialog penelusuran biasa). 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 menyetel android:hardwareAccelerated="true" dalam <application> elemen manifes atau untuk <activity> individual yang kurang penting.

    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 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. Ketika perangkat keras akselerasi dimatikan, lapisan perangkat keras berfungsi sama persis dengan lapisan perangkat lunak.

    Lapisan software didukung oleh bitmap dan menyebabkan tampilan dirender menggunakan antarmuka pipeline rendering software, meskipun jika akselerasi hardware diaktifkan. Lapisan perangkat lunak harus dapat 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 menggunakan Renderscript, Anda dapat mempercepat operasi grafis dan pemrosesan data. Renderscript adalah cara yang ideal untuk membuat efek 3D performa tinggi untuk aplikasi, wallpaper, korsel, dan banyak lagi.

    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 aliran 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}. Kerangka kerja media ini mendukung sebagian besar spesifikasi {i>HTTP Live streaming<i}, termasuk kecepatan bit adaptif. Lihat dokumen Format Media yang Didukung untuk informasi selengkapnya.

  • Data EXIF

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

  • Profil perekam video

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

  • Transfer file media digital

    Platform ini mencakup dukungan bawaan untuk {i>Media/Picture Transfer Protocol<i} (MTP/PTP) melalui USB, yang memungkinkan pengguna dengan mudah mentransfer jenis file media apa pun antar perangkat dan ke komputer {i>host<i}. Developer dapat memanfaatkan dukungan ini, membuat aplikasi yang memungkinkan pengguna membuat atau mengelola file file media 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 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 jenis DRM skema baru.

    Untuk produsen perangkat, pemilik konten, dan penyedia media digital Internet, DRM API plugin framework menyediakan sarana untuk menambahkan dukungan skema DRM pilihan ke dalam Sistem Android, untuk penerapan perlindungan konten yang aman.

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

    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 bergaya desktop lengkap, termasuk dukungan untuk tombol seperti Escape, Home, End, Hapus 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. Alat 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 sebuah kunci dikombinasikan dengan tombol {i>Control<i}. Saat membuat Menu Opsi, Anda dapat mendaftarkan keyboard pintasan dengan menetapkan atribut android:alphabeticShortcut atau android:numericShortcut untuk setiap <item> (atau dengan setShortcut()).
  • Android 3.0 menyertakan "keyboard virtual" baru perangkat dengan ID KeyCharacterMap.VIRTUAL_KEYBOARD. Virtual keyboard memiliki peta tombol AS bergaya desktop yang berguna untuk menyintesis peristiwa tombol untuk pengujian input teks.

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 dalamnya 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 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 pemisahan peristiwa sentuh di seluruh jendela, bilah sistem tidak dapat menerima peristiwa sentuh secara bersamaan dengan aktivitas Anda. 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 sambil tetap memungkinkan pengguna melakukan zoom dengan gestur jari (setBuiltInZoomControls() harus disetel 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 penggunaan CPU atau traffic jaringan saat WebView tidak ada di latar depan.
    • Callback onResume(), untuk melanjutkan pemrosesan yang dikaitkan 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 untuk diunggah:

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

    Atau, dengan mengecualikan parameter capture=camera, pengguna dapat memilih untuk merekam gambar baru dengan kamera atau pilih gambar dari perangkat (misalnya 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 adalah yang dinyatakan dengan data percepatan dan laju 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 feed 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

<uses-feature> Elemen manfest harus digunakan untuk memberi tahu entitas eksternal (seperti Google Play) tentang kumpulan fitur perangkat keras dan perangkat lunak yang diandalkan oleh 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 memberikan input pengguna yang dapat mengemulasi subset layar sentuh kemampuan IT. Contoh sistem input adalah {i>mouse<i} atau {i>remote control<i} yang menggerakkan kursor pada 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 tidak memerlukan gestur yang rumit dan Anda memerlukannya tidak ingin aplikasi Anda difilter dari perangkat dengan layar sentuh yang diemulasi, harus mendeklarasikan "android.hardware.faketouch" dengan <uses-feature> . Dengan begitu, aplikasi Anda akan tersedia untuk sebagian besar jenis perangkat, termasuk yang hanya menyediakan input layar sentuh yang diemulasikan.

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

Izin baru

  • "android.permission.BIND_REMOTEVIEWS"

    Izin ini harus dideklarasikan sebagai izin yang diperlukan dalam manifes <service> untuk implementasi RemoteViewsService. Misalnya, ketika 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 onboard.
    • 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 pengumpul 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
    • Koreksi dan perbaikan performa secara menyeluruh

Laporan perbedaan API

Untuk 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 terbaru dari API framework. Android 3.0 API diberi ID bilangan bulat — 11 — yang merupakan 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 di aplikasi Anda, Anda harus mengompilasi aplikasi terhadap library Android yang disediakan di platform Android 3.0 SDK. Tergantung kebutuhan, Anda mungkin juga perlu menambahkan android:minSdkVersion="11" ke elemen <uses-sdk> dalam elemen manifes. Jika aplikasi Anda dirancang untuk berjalan hanya pada Android 2.3 dan yang lebih tinggi, mendeklarasikan atribut akan mencegah aplikasi diinstal sebelumnya versi dasar dari platform tersebut.

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