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