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