Level API: 11
Untuk developer, platform Android 3.0
(HONEYCOMB
) tersedia sebagai komponen
yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library Android dan image
sistem, serta sekumpulan skin emulator dan lain-lain. Platform yang dapat didownload tidak menyertakan library
eksternal.
Untuk developer, platform Android 3.0 tersedia sebagai komponen yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library Android dan image sistem, serta sekumpulan skin emulator dan banyak lagi. Untuk mulai mengembangkan atau menguji Android 3.0, gunakan Android SDK Manager untuk mendownload platform ke SDK Anda.
Ringkasan API
Bagian di bawah ini memberikan ringkasan teknis tentang hal-hal baru bagi developer di Android 3.0, termasuk fitur baru dan perubahan pada API framework sejak versi sebelumnya.
Fragmen
Fragmen adalah komponen framework baru yang memungkinkan Anda memisahkan elemen
aktivitas yang berbeda ke dalam modul mandiri yang menentukan UI dan siklus prosesnya sendiri. Untuk membuat
fragmen, Anda harus memperluas class Fragment
dan menerapkan beberapa metode callback
siklus proses, mirip dengan Activity
. Selanjutnya, Anda dapat menggabungkan beberapa
fragmen dalam satu aktivitas untuk membangun UI multipanel tempat setiap
panel mengelola siklus proses dan input penggunanya sendiri.
Anda juga dapat menggunakan fragmen tanpa menyediakan UI dan sebagai gantinya menggunakan fragmen sebagai pekerja untuk aktivitas, seperti untuk mengelola progres download yang hanya terjadi saat aktivitas berjalan.
Selain itu:
- Fragmen bersifat mandiri dan Anda dapat menggunakannya kembali dalam berbagai aktivitas
- Anda dapat menambahkan, menghapus, mengganti, dan menganimasikan fragmen di dalam aktivitas
- Anda dapat menambahkan fragmen ke data sebelumnya yang dikelola oleh aktivitas, mempertahankan status fragmen saat diubah dan memungkinkan pengguna menavigasi mundur melalui berbagai status
- Dengan memberikan tata letak alternatif, Anda dapat mencampur dan mencocokkan fragmen, berdasarkan ukuran dan orientasi layar
- Fragmen memiliki akses langsung ke aktivitas penampungnya dan dapat menyumbangkan item ke Panel Tindakan aktivitas (dibahas berikutnya)
Untuk mengelola fragmen dalam aktivitas, Anda harus menggunakan FragmentManager
, yang menyediakan beberapa API untuk berinteraksi dengan fragmen, seperti
menemukan fragmen dalam aktivitas dan memunculkan fragmen dari data sebelumnya untuk memulihkan
status sebelumnya.
Untuk melakukan transaksi, seperti menambahkan atau menghapus fragmen, Anda harus membuat FragmentTransaction
. Anda kemudian dapat memanggil metode seperti add()
remove()
, atau replace()
. Setelah menerapkan semua
perubahan yang ingin dilakukan untuk transaksi, Anda harus memanggil commit()
dan sistem akan menerapkan transaksi fragmen ke
aktivitas tersebut.
Untuk informasi selengkapnya tentang penggunaan fragmen, baca dokumentasi Fragmen. Beberapa contoh juga tersedia dalam aplikasi Demo API.
Panel Tindakan
Panel Tindakan adalah pengganti panel judul tradisional di bagian atas jendela aktivitas. Menu ini menyertakan logo aplikasi di pojok kiri dan menyediakan antarmuka baru untuk item di Menu Opsi. Selain itu, Panel Tindakan memungkinkan Anda:
- Tambahkan item menu langsung di Panel Tindakan—sebagai "item tindakan".
Dalam deklarasi XML untuk item menu, sertakan atribut
android:showAsAction
dengan nilai"ifRoom"
. Jika ada cukup ruang, item menu akan muncul langsung di Panel Tindakan. Jika tidak, item akan ditempatkan dalam menu tambahan, yang diperlihatkan oleh ikon menu di sisi kanan Panel Tindakan. - Ganti item tindakan dengan widget (seperti kotak penelusuran)—membuat
"tampilan tindakan".
Pada deklarasi XML untuk item menu, tambahkan atribut
android:actionViewLayout
dengan resource tata letak atau atributandroid:actionViewClass
dengan nama class widget. (Anda juga harus mendeklarasikan atributandroid:showAsAction
agar item muncul di Panel Tindakan.) Jika tidak ada cukup ruang di Panel Tindakan dan item muncul di menu tambahan, item tersebut akan berperilaku seperti item menu biasa dan tidak menampilkan widget. - Menambahkan tindakan ke logo aplikasi dan menggantinya dengan logo kustom
Logo aplikasi secara otomatis diberi ID
android.R.id.home
, yang dikirim sistem ke callbackonOptionsItemSelected()
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 panggilsetDisplayUseLogoEnabled(true)
dalam aktivitas Anda. - Menambahkan breadcrumb untuk menavigasi mundur melalui data sebelumnya fragmen
- Tambahkan tab atau menu drop-down untuk menjelajahi fragmen
- Sesuaikan Panel Tindakan dengan tema dan latar belakang
Panel Tindakan adalah standar untuk semua aplikasi yang menggunakan tema holografik baru, yang
juga merupakan standar saat Anda menetapkan android:minSdkVersion
atau android:targetSdkVersion
ke "11"
.
Untuk informasi selengkapnya tentang Panel Tindakan, baca dokumentasi Panel Tindakan. Beberapa contoh juga tersedia dalam aplikasi Demo API.
Papan klip sistem
Kini aplikasi dapat menyalin dan menempelkan data (selain teks) ke dan dari papan klip di seluruh sistem. Data yang diklip dapat berupa teks biasa, URI, atau intent.
Dengan memberikan akses kepada sistem ke data yang Anda inginkan untuk disalin oleh pengguna, melalui penyedia konten, pengguna dapat menyalin konten yang kompleks (seperti gambar atau struktur data) dari aplikasi Anda dan menempelnya ke aplikasi lain yang mendukung jenis konten tersebut.
Untuk mulai menggunakan papan klip, dapatkan objek ClipboardManager
global
dengan memanggil getSystemService(CLIPBOARD_SERVICE)
.
Untuk menyalin item ke papan klip, Anda harus membuat objek ClipData
baru, yang menyimpan satu atau beberapa objek ClipData.Item
, yang masing-masing menjelaskan satu entity. Untuk membuat objek ClipData
yang hanya berisi satu ClipData.Item
, Anda dapat menggunakan salah satu metode helper,
seperti newPlainText()
, newUri()
, dan newIntent()
, yang masing-masing menampilkan objek ClipData
yang telah dimuat sebelumnya dengan
ClipData.Item
yang Anda sediakan.
Untuk menambahkan ClipData
ke papan klip, teruskan ke setPrimaryClip()
untuk instance ClipboardManager
Anda.
Kemudian, Anda dapat membaca file dari papan klip (untuk menempelkannya) dengan memanggil getPrimaryClip()
di ClipboardManager
. Menangani ClipData
yang Anda terima bisa
menjadi rumit dan Anda harus memastikan bahwa Anda benar-benar dapat menangani jenis data di papan klip
sebelum mencoba menempelkannya.
Papan klip hanya menyimpan satu bagian data yang diklip (objek
ClipData
) pada satu waktu, tetapi satu ClipData
dapat berisi beberapa ClipData.Item
.
Untuk mengetahui informasi selengkapnya, baca dokumentasi Salin dan Tempel. Anda juga dapat melihat implementasi simpel salin dan tempel dalam contoh Demo API dan implementasi yang lebih lengkap dalam contoh Note Pad.
Tarik lalu lepas
API baru menyederhanakan operasi tarik lalu lepas di antarmuka pengguna aplikasi Anda. Operasi
tarik adalah transfer beberapa jenis data—yang dibawa dalam objek
ClipData
—dari satu tempat ke tempat lain. Titik awal dan akhir untuk operasi tarik adalah View
, sehingga API yang langsung menangani operasi tarik lalu lepas berada
di class View
.
Operasi tarik lalu lepas memiliki siklus proses yang ditentukan oleh beberapa tindakan tarik—masing-masing
ditentukan oleh objek DragEvent
—seperti ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
, dan
ACTION_DROP
. Setiap tampilan yang ingin berpartisipasi dalam operasi
tarik dapat memproses tindakan ini.
Untuk mulai menarik konten dalam aktivitas Anda, panggil startDrag()
pada View
yang menyediakan objek ClipData
yang mewakili
data untuk ditarik, View.DragShadowBuilder
untuk memfasilitasi "bayangan"
yang dilihat pengguna di bawah jari mereka saat menarik, dan Object
yang dapat membagikan
informasi tentang objek tarik dengan tampilan yang dapat menerima objek.
Untuk menerima objek tarik dalam View
(menerima "drop"), daftarkan tampilan
dengan OnDragListener
dengan memanggil setOnDragListener()
. Saat peristiwa tarik terjadi pada tampilan, sistem akan memanggil onDrag()
untuk OnDragListener
, yang menerima DragEvent
yang menjelaskan jenis tindakan tarik yang telah terjadi (seperti ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
, dan
ACTION_DROP
). Selama penarikan, sistem berulang kali memanggil onDrag()
untuk tampilan di bawah tarik, untuk mengirimkan
aliran peristiwa tarik. Tampilan penerima dapat menanyakan jenis peristiwa yang dikirim ke onDragEvent()
dengan memanggil getAction()
di DragEvent
.
Catatan: Meskipun peristiwa tarik dapat membawa objek ClipData
, peristiwa ini tidak terkait dengan papan klip sistem. Operasi tarik lalu lepas
tidak boleh menempatkan data yang ditarik ke papan klip sistem.
Untuk informasi selengkapnya, baca dokumentasi Menarik dan Melepaskan. Anda juga dapat melihat implementasi tarik lalu lepas di aplikasi Demo API dan aplikasi Honeycomb Gallery.
Widget aplikasi
Android 3.0 mendukung beberapa class widget baru untuk widget aplikasi yang lebih interaktif di Layar utama
pengguna, termasuk: GridView
, ListView
, StackView
, ViewFlipper
, dan AdapterViewFlipper
.
Yang lebih penting, Anda dapat menggunakan RemoteViewsService
baru untuk membuat widget
aplikasi dengan koleksi, menggunakan widget seperti GridView
, ListView
, dan StackView
yang didukung oleh data jarak jauh,
seperti dari penyedia konten.
Class AppWidgetProviderInfo
(ditentukan dalam XML dengan elemen <appwidget-provider>
) juga mendukung dua kolom baru: autoAdvanceViewId
dan previewImage
. Kolom autoAdvanceViewId
memungkinkan Anda menentukan ID tampilan
sub-tampilan widget aplikasi yang harus maju otomatis oleh host widget aplikasi. Kolom
previewImage
menentukan pratinjau
tampilan widget aplikasi dan ditampilkan kepada pengguna dari pemilih widget. Jika kolom ini tidak
disediakan, ikon widget aplikasi akan digunakan untuk pratinjau.
Guna membantu membuat gambar pratinjau untuk widget aplikasi Anda (yang akan ditentukan di kolom previewImage
), Android emulator menyertakan
aplikasi bernama "Pratinjau Widget". Untuk membuat gambar pratinjau, luncurkan aplikasi ini, pilih widget aplikasi untuk aplikasi Anda, dan atur tampilan gambar pratinjau yang Anda inginkan, lalu simpan dan tempatkan di resource drawable aplikasi Anda.
Anda dapat melihat implementasi fitur widget aplikasi baru di aplikasi Widget Aplikasi StackView dan Widget Daftar Cuaca.
Notifikasi bilah status
Notification
API telah diperluas untuk mendukung lebih banyak notifikasi status
bar yang kaya konten, ditambah class Notification.Builder
baru memungkinkan Anda membuat
objek Notification
dengan mudah.
Fitur baru ini meliputi:
- Dukungan untuk ikon besar dalam notifikasi, menggunakan
setLargeIcon()
. Hal ini biasanya agar aplikasi sosial menampilkan foto kontak orang yang merupakan sumber notifikasi atau agar aplikasi media menampilkan thumbnail album. - Dukungan untuk tata letak kustom di ticker status bar, menggunakan
setTicker()
. - Dukungan untuk tata letak notifikasi kustom agar menyertakan tombol dengan
PendingIntent
, untuk widget notifikasi yang lebih interaktif. Misalnya, notifikasi dapat mengontrol pemutaran musik tanpa memulai aktivitas.
Loader konten
API framework baru memfasilitasi pemuatan data asinkron menggunakan class Loader
. Anda dapat menggunakannya bersama komponen UI seperti tampilan dan
fragmen untuk memuat data secara dinamis dari thread pekerja. Subclass CursorLoader
dirancang khusus untuk membantu Anda melakukannya untuk data yang didukung oleh
ContentProvider
.
Anda hanya perlu mengimplementasikan antarmuka LoaderCallbacks
untuk menerima callback saat loader baru diminta atau data telah berubah, lalu memanggil initLoader()
guna melakukan inisialisasi loader untuk aktivitas atau fragmen Anda.
Untuk informasi selengkapnya, baca dokumentasi Loader. Anda juga dapat melihat kode contoh menggunakan loader dalam contoh LoaderCursor dan LoaderThrottle.
Bluetooth A2DP dan API headset
Android kini menyertakan API untuk aplikasi guna memverifikasi status perangkat Bluetooth A2DP dan profil headset yang terhubung. Misalnya, aplikasi dapat mengidentifikasi saat headset Bluetooth terhubung untuk mendengarkan musik dan memberi tahu pengguna yang sesuai. Aplikasi juga dapat menerima siaran untuk perintah AT khusus vendor dan memberi tahu pengguna tentang status perangkat yang terhubung, seperti saat baterai perangkat yang terhubung rendah.
Anda dapat menginisialisasi masing-masing BluetoothProfile
dengan memanggil getProfileProxy()
dengan konstanta profil A2DP
atau HEADSET
dan BluetoothProfile.ServiceListener
untuk menerima
callback saat klien Bluetooth terhubung atau terputus.
Framework animasi
Framework animasi fleksibel yang baru memungkinkan Anda menganimasikan properti arbitrer dari objek apa pun (View, Drawable, Fragment, Object, atau lainnya). Class ini memungkinkan Anda menentukan beberapa aspek animasi, seperti:
- Durasi
- Jumlah dan perilaku berulang
- Jenis interpolasi waktu
- Animator menyetel untuk memutar animasi secara bersamaan, berurutan, atau setelah penundaan yang ditentukan
- Penundaan refresh frame
Anda dapat menentukan aspek animasi ini, dan lainnya, untuk nilai warna int, float, dan heksadesimal
objek, secara default. Artinya, jika objek memiliki kolom properti untuk salah satu jenis ini, Anda
dapat mengubah nilainya dari waktu ke waktu untuk memengaruhi animasi. Untuk menganimasikan jenis nilai lainnya, Anda memberi tahu
sistem cara menghitung nilai untuk jenis tertentu, dengan menerapkan antarmuka TypeEvaluator
.
Ada dua animator yang dapat Anda gunakan untuk menganimasikan nilai properti: ValueAnimator
dan ObjectAnimator
. ValueAnimator
menghitung nilai animasi, tetapi tidak mengetahui objek atau properti tertentu yang dianimasikan sebagai hasilnya. Library ini hanya melakukan penghitungan, dan Anda harus
memproses update dan memproses data dengan logika Anda sendiri. ObjectAnimator
adalah subclass dari ValueAnimator
dan
memungkinkan Anda menetapkan objek dan properti yang akan dianimasikan, serta menangani semua tugas animasi.
Artinya, Anda memberi ObjectAnimator
objek yang akan dianimasikan, properti objek yang akan berubah dari waktu ke waktu, dan kumpulan nilai yang akan diterapkan ke properti dari waktu ke waktu, lalu memulai animasi.
Selain itu, class LayoutTransition
memungkinkan animasi transisi
otomatis untuk perubahan yang Anda buat pada tata letak aktivitas. Guna mengaktifkan transisi untuk sebagian
tata letak, buat objek LayoutTransition
dan tetapkan pada
ViewGroup
dengan memanggil setLayoutTransition()
. Hal ini menyebabkan animasi
default berjalan setiap kali item ditambahkan ke atau dihapus dari grup. Untuk menentukan animasi kustom, panggil setAnimator()
pada LayoutTransition
dan berikan Animator
kustom, seperti ValueAnimator
atau ObjectAnimator
yang dibahas di atas.
Untuk informasi selengkapnya, lihat dokumentasi Animasi Properti. Anda juga dapat melihat beberapa contoh penggunaan API animasi pada aplikasi Demo API.
Framework UI yang diperluas
- Pilihan pilihan ganda untuk ListView dan GridView
Mode
CHOICE_MODE_MULTIPLE_MODAL
baru untuksetChoiceMode()
memungkinkan pengguna memilih beberapa item dariListView
atauGridView
. Jika digunakan bersama dengan Panel Tindakan, pengguna dapat memilih beberapa item, lalu memilih tindakan yang akan dilakukan dari daftar opsi di Panel Tindakan (yang telah berubah menjadi Mode Tindakan Multi-pilihan).Untuk mengaktifkan pilihan pilihan ganda, panggil
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
dan daftarkanMultiChoiceModeListener
dengansetMultiChoiceModeListener()
.Saat pengguna menekan lama suatu item, Panel Tindakan akan beralih ke Mode Tindakan Multi-Pilihan. Sistem memberi tahu
MultiChoiceModeListener
saat item dipilih dengan memanggilonItemCheckedStateChanged()
.Untuk contoh pemilihan pilihan ganda, lihat class List15. java dalam aplikasi contoh Demo API.
- API baru untuk mengubah tampilan
API baru memungkinkan Anda menerapkan transformasi 2D dan 3D dengan mudah pada tampilan dalam tata letak aktivitas. Transformasi baru dapat dilakukan dengan sekumpulan properti objek yang menentukan posisi tata letak, orientasi, transparansi, dan lainnya.
Metode baru untuk menyetel properti tampilan meliputi:
setAlpha()
,setBottom()
,setLeft()
,setRight()
,setBottom()
,setPivotX()
,setPivotY()
,setRotationX()
,setRotationY()
,setScaleX()
,setScaleY()
,setAlpha()
, dan lainnya.Beberapa metode juga memiliki atribut XML yang sesuai dan dapat Anda tentukan dalam file tata letak, untuk menerapkan transformasi default. Atribut yang tersedia meliputi:
translationX
,translationY
,rotation
,rotationX
,rotationY
,scaleX
,scaleY
,transformPivotX
,transformPivotY
, danalpha
.Dengan menggunakan beberapa properti tampilan baru ini bersama dengan framework animasi baru (dibahas di atas), Anda dapat dengan mudah menerapkan beberapa animasi menarik ke tampilan. Misalnya, untuk memutar tampilan pada sumbu y-nya, berikan
ObjectAnimator
denganView
, properti "rotasiY", serta nilai awal dan akhir:Kotlin
ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply { duration = 2000 start() }
Java
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360); animator.setDuration(2000); animator.start();
- Tema holografik baru
Widget sistem standar dan tampilan keseluruhan telah didesain ulang dan menyertakan tema antarmuka pengguna "holografik" yang baru. Sistem menerapkan tema baru menggunakan sistem gaya dan tema standar.
Aplikasi apa pun yang menargetkan platform Android 3.0—dengan menyetel nilai
android:minSdkVersion
atauandroid:targetSdkVersion
ke"11"
—akan mewarisi tema holografik secara default. Namun, jika aplikasi Anda juga menerapkan temanya sendiri, tema Anda akan mengganti tema holografik, kecuali jika Anda memperbarui gaya untuk mewarisi tema holografik.Untuk menerapkan tema holografik pada aktivitas individual atau mewarisinya dalam definisi tema Anda sendiri, gunakan salah satu dari beberapa tema
Theme.Holo
baru. Jika aplikasi Anda kompatibel dengan versi Android lebih rendah dari 3.0 dan menerapkan tema kustom, Anda harus memilih tema berdasarkan versi platform. - Widget baru
AdapterViewAnimator
Class dasar untuk
AdapterView
yang menjalankan animasi saat beralih di antara tampilannya.AdapterViewFlipper
ViewAnimator
sederhana yang menganimasikan antara dua atau beberapa tampilan yang telah ditambahkan. Hanya satu turunan yang ditampilkan dalam satu waktu. Jika diminta, metode ini dapat otomatis beralih di antara setiap turunan pada interval yang teratur.CalendarView
Memungkinkan pengguna memilih tanggal dari kalender dengan menyentuh tanggal dan dapat men-scroll atau mengayunkan kalender ke tanggal yang diinginkan. Anda dapat mengonfigurasi rentang tanggal yang tersedia di widget.
ListPopupWindow
Menambatkan dirinya sendiri ke tampilan host dan menampilkan daftar pilihan, misalnya untuk daftar saran saat mengetik ke dalam tampilan
EditText
.NumberPicker
Memungkinkan pengguna memilih angka dari rentang yang telah ditentukan. Widget menampilkan kolom input, serta tombol atas dan bawah untuk memilih angka. Menyentuh kolom input memungkinkan pengguna men-scroll nilai atau menyentuh lagi untuk mengedit nilai saat ini secara langsung. Hal ini juga memungkinkan Anda memetakan posisi ke string sehingga string yang sesuai ditampilkan, bukan posisi indeks.
PopupMenu
Menampilkan
Menu
dalam jendela pop-up modal yang ditambatkan ke tampilan. Pop-up akan muncul di bawah tampilan anchor jika ada ruang, atau di atasnya jika tidak ada. Jika IME (keyboard virtual) terlihat, pop-up tidak akan tumpang tindih dengan IME sampai pengguna menyentuh menu.SearchView
Menyediakan kotak penelusuran yang dapat dikonfigurasi untuk mengirimkan kueri penelusuran ke aktivitas yang ditentukan dan menampilkan saran penelusuran (dengan cara yang sama seperti dialog penelusuran tradisional). Widget ini sangat berguna untuk menawarkan widget penelusuran di Panel Tindakan. Untuk informasi selengkapnya, lihat Membuat Antarmuka Penelusuran.
StackView
Tampilan yang menampilkan turunannya dalam stack 3D dan memungkinkan pengguna menggeser melalui tampilan seperti rolodex.
Grafis
- Grafis 2D dengan akselerasi hardware
Kini Anda dapat mengaktifkan perender OpenGL untuk aplikasi dengan menyetel
android:hardwareAccelerated="true"
di elemen<application>
elemen manifes atau untuk setiap elemen<activity>
.Flag ini membantu aplikasi dengan membuatnya menggambar lebih cepat. Menghasilkan animasi yang lebih halus, scroll yang lebih lancar, serta performa dan respons yang lebih baik secara keseluruhan terhadap interaksi pengguna.
- Melihat dukungan untuk lapisan hardware dan software
Secara default,
View
tidak memiliki lapisan yang ditentukan. Anda dapat menentukan agar tampilan didukung oleh lapisan hardware atau software, yang ditentukan oleh nilaiLAYER_TYPE_HARDWARE
danLAYER_TYPE_SOFTWARE
, menggunakan atributsetLayerType()
ataulayerType
.Lapisan hardware didukung oleh tekstur khusus hardware (umumnya Frame Buffer Objects atau FBO pada hardware OpenGL) dan menyebabkan tampilan dirender menggunakan pipeline rendering hardware Android, namun hanya jika akselerasi hardware diaktifkan untuk hierarki tampilan. Jika akselerasi hardware dinonaktifkan, lapisan hardware berperilaku persis seperti lapisan software.
Lapisan software didukung oleh bitmap dan menyebabkan tampilan dirender menggunakan pipeline rendering software Android, meskipun akselerasi hardware diaktifkan. Lapisan software harus dihindari jika hierarki tampilan yang terpengaruh sering diperbarui. Setiap update akan perlu merender ulang lapisan software, yang berpotensi menjadi lambat.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi
LAYER_TYPE_HARDWARE
danLAYER_TYPE_SOFTWARE
. - Mesin grafis 3D Renderscript
Renderscript adalah framework 3D runtime yang menyediakan API untuk membuat scene 3D serta bahasa shader khusus yang tidak bergantung platform untuk performa maksimal. Dengan Renderscript, Anda dapat mempercepat operasi grafis dan pemrosesan data. Renderscript adalah cara yang ideal untuk membuat efek 3D berperforma tinggi untuk aplikasi, wallpaper, carousel, dan banyak lagi.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Rendering 3D dan Komputasi dengan Renderscript.
Media
- Video time lapse
Camcorder API kini mendukung kemampuan untuk merekam video time lapse.
setCaptureRate()
menetapkan kecepatan pengambilan frame. - Dukungan tekstur untuk streaming gambar
SurfaceTexture
baru memungkinkan Anda merekam aliran gambar sebagai tekstur OpenGL ES. Dengan memanggilsetPreviewTexture()
untuk instanceCamera
, Anda dapat menentukanSurfaceTexture
yang akan digunakan untuk menggambar pemutaran video atau frame pratinjau dari kamera. - Live streaming HTTP
Aplikasi kini dapat meneruskan URL playlist M3U ke framework media untuk memulai sesi Live streaming HTTP. Framework media mendukung sebagian besar spesifikasi Live streaming HTTP, termasuk kecepatan bit adaptif. Lihat dokumen Format Media yang Didukung untuk informasi selengkapnya.
- Data EXIF
ExifInterface
menyertakan kolom baru untuk bukaan foto, ISO, dan waktu eksposur. - Profil perekam video
Metode
hasProfile()
baru dan beberapa profil kualitas video (sepertiQUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
, dan lainnya) memungkinkan Anda menentukan opsi kualitas perekam video. - Transfer file media digital
Platform ini menyertakan dukungan bawaan untuk Media/Picture Transfer Protocol (MTP/PTP) melalui USB, sehingga pengguna dapat dengan mudah mentransfer berbagai jenis file media antar-perangkat dan ke komputer host. Developer dapat memanfaatkan dukungan ini dengan membuat aplikasi yang memungkinkan pengguna membuat atau mengelola file multimedia yang mungkin ingin ditransfer atau dibagikan ke berbagai perangkat.
- Manajemen hak digital (DRM)
Framework pengelolaan hak digital (DRM) yang dapat diperluas yang baru untuk memeriksa dan menegakkan hak digital. Hal ini diterapkan dalam dua lapisan arsitektur:
- API framework DRM, yang diekspos ke aplikasi dan dijalankan melalui VM Dalvik untuk aplikasi standar.
- Pengelola DRM kode native yang mengimplementasikan API framework dan mengekspos antarmuka bagi plugin DRM guna menangani pengelolaan hak dan dekripsi untuk berbagai skema DRM.
Untuk developer aplikasi, framework ini menawarkan API abstrak dan terpadu yang menyederhanakan pengelolaan konten yang dilindungi. API ini menyembunyikan kompleksitas operasi DRM dan memungkinkan mode operasi yang konsisten, baik untuk konten yang dilindungi maupun yang tidak dilindungi, serta di berbagai skema DRM.
Untuk produsen perangkat, pemilik konten, dan penyedia media digital internet, API plugin framework DRM memberikan cara untuk menambahkan dukungan bagi skema DRM pilihan ke dalam sistem Android, untuk penerapan perlindungan konten yang aman.
Rilis pratinjau tidak menyediakan plugin DRM native untuk memeriksa dan menegakkan hak digital. Namun, produsen perangkat dapat mengirimkan plugin DRM bersama perangkat mereka.
Anda dapat menemukan semua API DRM dalam paket
android.drm
.
Dukungan keyboard
- Dukungan untuk pengubah Control, Meta, Caps Lock, Num Lock, dan Scroll Lock. Untuk mengetahui informasi selengkapnya,
lihat
META_CTRL_ON
dan kolom terkait. - Dukungan untuk keyboard bergaya desktop lengkap, termasuk dukungan untuk tombol seperti Escape, Home, End,
Delete, dan lainnya. Anda dapat menentukan apakah peristiwa tombol berasal dari keyboard lengkap dengan
membuat kueri
getKeyboardType()
dan memeriksaKeyCharacterMap.FULL
TextView
kini mendukung potongan, salin, tempel, dan pilih semua berbasis keyboard, menggunakan kombinasi tombol Control+X, Control+C, Control+V, dan Control+A. API ini juga mendukung pemilihan PageUp/PageDown, Home/End, dan berbasis keyboard.KeyEvent
menambahkan beberapa metode baru untuk mempermudah pemeriksaan status pengubah kunci dengan benar dan konsisten. LihathasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
.- Aplikasi dapat menerapkan pintasan keyboard kustom dengan membuat subclass
Activity
,Dialog
, atauView
dan mengimplementasikanonKeyShortcut()
. Framework ini memanggil metode ini setiap kali kunci digabungkan dengan tombol Control. Saat membuat Menu Opsi, Anda dapat mendaftarkan pintasan keyboard dengan menetapkan atributandroid:alphabeticShortcut
atauandroid:numericShortcut
untuk setiap elemen<item>
(atau dengansetShortcut()
). - Android 3.0 menyertakan perangkat "keyboard virtual" baru dengan ID
KeyCharacterMap.VIRTUAL_KEYBOARD
. Keyboard virtual memiliki peta tombol AS gaya desktop yang berguna untuk menyintesis peristiwa tombol untuk menguji input.
Peristiwa sentuh terpisah
Sebelumnya, hanya satu tampilan yang dapat menerima peristiwa sentuh pada satu waktu. Android 3.0 menambahkan dukungan untuk memisahkan peristiwa sentuh di seluruh tampilan dan bahkan jendela, sehingga tampilan yang berbeda dapat menerima peristiwa sentuh simultan.
Peristiwa sentuh pemisahan diaktifkan secara default saat aplikasi menargetkan
Android 3.0. Artinya, jika aplikasi telah menetapkan nilai atribut android:minSdkVersion
atau android:targetSdkVersion
ke "11"
.
Namun, properti berikut memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh tampilan dalam grup tampilan tertentu dan di seluruh jendela.
- Atribut
android:splitMotionEvents
untuk grup tampilan memungkinkan Anda menonaktifkan peristiwa sentuh terpisah yang terjadi di antara tampilan turunan dalam tata letak. Misalnya:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
Dengan cara ini, tampilan turunan di tata letak linear tidak dapat memisahkan peristiwa sentuh—hanya satu tampilan yang dapat menerima peristiwa sentuh dalam satu waktu.
- Properti gaya
android:windowEnableSplitTouch
memungkinkan Anda menonaktifkan peristiwa sentuh terpisah di seluruh jendela, dengan menerapkannya ke tema untuk aktivitas atau seluruh aplikasi. Misalnya:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
Ketika tema ini diterapkan ke
<activity>
atau<application>
, hanya peristiwa sentuh dalam jendela aktivitas saat ini yang diterima. Misalnya, dengan menonaktifkan peristiwa sentuh terpisah di seluruh jendela, kolom sistem tidak dapat menerima peristiwa sentuh secara bersamaan dengan aktivitas. Hal ini tidak memengaruhi apakah tampilan dalam aktivitas dapat memisahkan peristiwa sentuh—secara default, aktivitas masih dapat membagi peristiwa sentuh di seluruh tampilan.Untuk mengetahui informasi selengkapnya tentang cara membuat tema, baca Menerapkan Gaya dan Tema.
WebKit
- Class
WebViewFragment
baru untuk membuat fragmen yang terdiri dariWebView
. - Metode
WebSettings
baru:setDisplayZoomControls()
memungkinkan Anda menyembunyikan kontrol zoom di layar sambil tetap mengizinkan pengguna melakukan zoom dengan gestur jari (setBuiltInZoomControls()
harus ditetapkantrue
).- Metode
WebSettings
baru,setEnableSmoothTransition()
, memungkinkan Anda mengaktifkan transisi yang lancar saat menggeser dan melakukan zoom. Jika diaktifkan, WebView akan memilih solusi untuk memaksimalkan performa (misalnya, konten WebView mungkin tidak diperbarui selama transisi).
- Metode
WebView
baru:onPause()
, untuk menjeda pemrosesan apa pun yang terkait dengan WebView saat disembunyikan. Hal ini berguna untuk mengurangi traffic CPU atau jaringan yang tidak perlu saat WebView tidak ada di latar depan.onResume()
, untuk melanjutkan pemrosesan yang terkait dengan WebView, yang dijeda selamaonPause()
.saveWebArchive()
memungkinkan Anda menyimpan tampilan saat ini sebagai arsip web di perangkat.showFindDialog()
memulai penelusuran teks di tampilan saat ini.
Browser
Aplikasi Browser menambahkan fitur berikut untuk mendukung aplikasi web:
- Perekaman media
Seperti yang ditetapkan oleh spesifikasi HTML Media Capture, Browser memungkinkan aplikasi web mengakses kemampuan perekaman audio, gambar, dan video dari perangkat. Misalnya, HTML berikut memberikan input bagi pengguna untuk mengambil foto yang akan diupload:
<input type="file" accept="image/*;capture=camera" />
Atau dengan mengecualikan parameter
capture=camera
, pengguna dapat memilih untuk mengambil gambar baru dengan kamera atau memilih gambar dari perangkat (seperti dari aplikasi Galeri). - Orientasi Perangkat
Seperti yang ditetapkan oleh spesifikasi Peristiwa Orientasi Perangkat, Browser memungkinkan aplikasi web memproses peristiwa DOM yang memberikan informasi tentang orientasi fisik dan gerakan perangkat.
Orientasi perangkat dinyatakan dengan sumbu x, y, dan z, dalam derajat dan gerakan dinyatakan dengan data percepatan dan laju rotasi. Halaman web dapat mendaftar peristiwa orientasi dengan memanggil
window.addEventListener
dengan jenis peristiwa"deviceorientation"
dan mendaftar untuk peristiwa gerakan dengan mendaftarkan jenis peristiwa"devicemotion"
. - Transformasi 3D CSS
Seperti yang ditetapkan oleh spesifikasi Modul Transformasi 3D CSS, Browser memungkinkan elemen yang dirender oleh CSS diubah dalam tiga dimensi.
Utilitas JSON
Class baru, JsonReader
dan JsonWriter
, membantu Anda
membaca dan menulis aliran JSON. API baru melengkapi class org.json
, yang memanipulasi
dokumen dalam memori.
Anda dapat membuat instance JsonReader
dengan memanggil
metode konstruktornya dan meneruskan InputStreamReader
yang memberi feed string JSON.
Kemudian, mulai baca objek dengan memanggil beginObject()
, baca
nama kunci dengan nextName()
, baca nilai menggunakan metode
sesuai dengan jenisnya, seperti nextString()
dan nextInt()
, lalu lanjutkan selama hasNext()
bernilai benar (true).
Anda dapat membuat instance JsonWriter
dengan memanggil konstruktornya dan
meneruskan OutputStreamWriter
yang sesuai. Kemudian, tulis data JSON dengan cara yang mirip dengan pembaca, menggunakan name()
untuk menambahkan nama properti dan metode value()
yang sesuai untuk menambahkan nilai masing-masing.
Class ini bersifat ketat secara default. Metode setLenient()
di setiap class mengonfigurasinya agar lebih bebas dalam hal yang mereka terima. Mode penguraian
yang longgar ini juga kompatibel dengan parser default org.json
.
Konstanta fitur baru
Elemen <uses-feature>
harus digunakan untuk menginformasikan entity eksternal (seperti Google Play) tentang kumpulan
fitur hardware dan software yang diperlukan aplikasi Anda. Dalam rilis ini, Android menambahkan
konstanta baru berikut yang dapat dideklarasikan aplikasi dengan elemen ini:
"android.hardware.faketouch"
Jika dideklarasikan, hal ini menunjukkan bahwa aplikasi tersebut kompatibel dengan perangkat yang menawarkan layar sentuh yang diemulasi (atau yang lebih baik). Perangkat yang menawarkan layar sentuh yang diemulasikan menyediakan sistem input pengguna yang dapat mengemulasi subset kemampuan layar sentuh. Contoh sistem input semacam ini adalah mouse atau remote control yang menggerakkan kursor pada layar. Sistem input tersebut mendukung peristiwa sentuh dasar seperti klik ke bawah, klik ke atas, dan tarik. Namun, jenis input yang lebih rumit (seperti gestur, ayunkan jari, dll.) mungkin lebih sulit atau tidak mungkin di perangkat sentuh palsu (dan gestur multisentuh pasti tidak mungkin dilakukan).
Jika aplikasi Anda tidak memerlukan gestur rumit dan Anda tidak ingin aplikasi difilter dari perangkat dengan layar sentuh yang diemulasi, Anda harus mendeklarasikan
"android.hardware.faketouch"
dengan elemen<uses-feature>
. Dengan cara ini, aplikasi Anda akan tersedia untuk sebagian besar jenis perangkat, termasuk perangkat yang hanya menyediakan input layar sentuh yang diemulasi.Semua perangkat yang menyertakan layar sentuh juga mendukung
"android.hardware.faketouch"
, karena kemampuan layar sentuh adalah superset dari kemampuan palsutouch. Oleh karena itu, kecuali jika Anda benar-benar memerlukan layar sentuh, Anda harus menambahkan elemen<uses-feature>
untuk palsutouch.
Izin baru
"android.permission.BIND_REMOTEVIEWS"
Hal ini harus dideklarasikan sebagai izin yang diperlukan dalam elemen manifes
<service>
untuk implementasiRemoteViewsService
. Misalnya, saat membuat Widget Aplikasi yang menggunakanRemoteViewsService
untuk mengisi tampilan koleksi, entri manifes mungkin terlihat seperti ini:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
Teknologi platform baru
- Penyimpanan
- dukungan sistem file ext4 untuk mengaktifkan penyimpanan eMMC {i>onboard<i}.
- FUSE sistem file untuk mendukung perangkat MTP.
- Dukungan mode host USB untuk mendukung keyboard dan hub USB.
- Dukungan untuk MTP/PTP
- Kernel Linux
- Diupgrade ke versi 2.6.36
- VM Dalvik
- Kode baru untuk mendukung dan mengoptimalkan SMP
- Berbagai peningkatan pada infrastruktur JIT
- Peningkatan pembersih sampah memori:
- Sesuai untuk SMP
- Dukungan untuk ukuran heap yang lebih besar
- Penanganan terpadu untuk bitmap dan buffering byte
- Library Inti Dalvik
- Implementasi NIO baru yang jauh lebih cepat (library I/O modern)
- Pesan pengecualian yang ditingkatkan
- Perbaikan ketepatan dan performa secara keseluruhan
Laporan perbedaan API
Untuk melihat tampilan mendetail semua perubahan API di Android 3.0 (API Level 11), lihat Laporan Perbedaan API.
API Level
Platform Android 3.0 menghadirkan versi yang telah diupdate dari API framework. Android 3.0 API diberi ID bilangan bulat — 11 — yang disimpan dalam sistem itu sendiri. ID ini, yang disebut "API Level", memungkinkan sistem menentukan dengan benar apakah aplikasi kompatibel dengan sistem tersebut, sebelum menginstal aplikasi.
Untuk menggunakan API yang diperkenalkan di Android 3.0 di aplikasi,
Anda perlu mengompilasi aplikasi terhadap library Android yang disediakan di
platform Android 3.0 SDK. Bergantung pada kebutuhan, Anda mungkin juga perlu menambahkan atribut android:minSdkVersion="11"
ke elemen <uses-sdk>
dalam manifes aplikasi. Jika aplikasi Anda dirancang hanya untuk berjalan di Android 2.3 dan yang lebih tinggi,
mendeklarasikan atribut ini akan mencegah penginstalan aplikasi pada versi
platform sebelumnya.
Untuk mengetahui informasi selengkapnya, baca Apa itu API Level?