Level API: 12
Untuk developer, platform Android 3.1
(HONEYCOMB_MR1
) 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. Platform yang dapat didownload tidak menyertakan library eksternal.
Untuk developer, platform Android 3.1 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.1, 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.1, termasuk fitur baru dan perubahan pada API framework sejak versi sebelumnya.
API USB
Android 3.1 memperkenalkan API baru yang canggih untuk mengintegrasikan periferal yang terhubung dengan aplikasi yang berjalan di platform. API ini didasarkan pada stack dan layanan USB (Universal Serial Bus) yang diintegrasikan ke dalam platform, termasuk dukungan untuk interaksi perangkat dan host USB. Dengan menggunakan API, developer dapat membuat aplikasi yang dapat menemukan, berkomunikasi, dan mengelola berbagai jenis perangkat yang terhubung melalui USB.
Stack dan API membedakan dua jenis dasar hardware USB, berdasarkan apakah perangkat Android berfungsi sebagai host atau hardware eksternal bertindak sebagai host:
- Perangkat USB adalah bagian dari hardware terhubung yang bergantung pada perangkat Android untuk berfungsi sebagai host. Misalnya, sebagian besar perangkat input, mouse, dan joystick adalah perangkat USB, begitu juga kamera, hub, dan sebagainya.
- Aksesori USB adalah bagian dari hardware terhubung yang memiliki pengontrol host USB, menyediakan daya, dan dirancang untuk berkomunikasi dengan perangkat yang didukung Android melalui USB. Berbagai periferal dapat terhubung sebagai aksesori, mulai dari pengontrol robot hingga peralatan musik, sepeda olahraga, dan banyak lagi.
Untuk kedua jenis — perangkat USB dan aksesori USB — API USB platform mendukung penemuan berdasarkan siaran intent saat terpasang atau dilepas, serta antarmuka standar, endpoint, dan mode transfer (kontrol, massal, dan interupsi).
USB API tersedia dalam paket android.hardware.usb
. Class
pusatnya adalah UsbManager
, yang menyediakan
metode bantuan untuk mengidentifikasi dan berkomunikasi dengan
perangkat USB dan aksesori USB. Aplikasi dapat memperoleh instance
UsbManager
, lalu membuat kueri untuk daftar perangkat atau aksesori
yang terpasang, lalu berkomunikasi dengan atau mengelolanya.
UsbManager
juga mendeklarasikan tindakan intent yang
disiarkan sistem, untuk mengumumkan saat aksesori atau perangkat USB terpasang atau
dilepas.
Class lainnya meliputi:
UsbDevice
, class yang mewakili hardware eksternal yang terhubung sebagai perangkat USB (dengan perangkat Android yang bertindak sebagai host).UsbAccessory
, yang mewakili hardware eksternal yang terhubung sebagai host USB (dengan perangkat Android yang berfungsi sebagai perangkat USB).UsbInterface
danUsbEndpoint
, yang menyediakan akses ke endpoint dan antarmuka USB standar untuk perangkat.UsbDeviceConnection
danUsbRequest
, untuk mengirim dan menerima data serta mengontrol pesan ke atau dari perangkat USB, secara sinkron dan asinkron.UsbConstants
, yang menyediakan konstanta untuk mendeklarasikan jenis endpoint, class perangkat, dan sebagainya.
Perhatikan bahwa meskipun stack USB dibangun ke dalam platform, dukungan sebenarnya untuk mode aksesori terbuka dan host USB pada perangkat tertentu ditentukan oleh produsennya. Secara khusus, mode host bergantung pada hardware pengontrol USB yang sesuai di perangkat berbasis Android.
Selain itu, developer dapat meminta pemfilteran di Google Play, sehingga aplikasi mereka tidak tersedia bagi pengguna yang perangkatnya tidak menyediakan dukungan USB yang sesuai. Untuk meminta pemfilteran, tambahkan salah satu atau kedua elemen di bawah ini ke manifes aplikasi, sesuai kebutuhan:
- Jika aplikasi hanya dapat dilihat oleh perangkat yang mendukung mode host
USB (koneksi perangkat USB), deklarasikan elemen ini:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- Jika aplikasi hanya dapat dilihat oleh perangkat yang mendukung aksesori
USB (koneksi host USB), deklarasikan elemen ini:
<uses-feature android:name="android.hardware.usb.accessory" android:required="true">
Untuk mengetahui informasi selengkapnya tentang cara mengembangkan aplikasi yang berinteraksi dengan aksesori USB, lihat dokumentasi developer.
Untuk melihat contoh aplikasi yang menggunakan API host USB, lihat Pengujian ADB dan Peluncur Rudal
API MTP/PTP
Android 3.1 mengekspos MTP API baru yang memungkinkan aplikasi berinteraksi langsung dengan kamera yang terhubung dan perangkat PTP lainnya. API baru memudahkan aplikasi menerima notifikasi saat perangkat dipasang dan dihapus, mengelola file dan penyimpanan di perangkat tersebut, serta mentransfer file dan metadata ke dan dari perangkat tersebut. MTP API menerapkan subset PTP (Picture Transfer Protocol) dari spesifikasi MTP (Media Transfer Protocol).
MTP API tersedia dalam paket android.mtp
dan menyediakan
class berikut:
MtpDevice
mengenkapsulasi perangkat MTP yang terhubung melalui bus host USB. Aplikasi dapat membuat instance objek dari jenis ini, lalu menggunakan metodenya untuk mendapatkan informasi tentang perangkat dan objek yang tersimpan di dalamnya, serta membuka koneksi dan mentransfer data. Beberapa metodenya meliputi:getObjectHandles()
menampilkan daftar handle untuk semua objek di perangkat yang cocok dengan format dan induk yang ditentukan. Untuk mendapatkan informasi tentang suatu objek, aplikasi dapat meneruskan handle kegetObjectInfo()
.importFile()
memungkinkan aplikasi menyalin data untuk suatu objek ke file di penyimpanan eksternal. Panggilan ini dapat diblokir selama jumlah waktu yang arbitrer, bergantung pada ukuran data dan kecepatan perangkat, sehingga harus dilakukan dari thread spearate.open()
memungkinkan aplikasi membuka perangkat MTP/PTP yang terhubung.getThumbnail()
menampilkan thumbnail objek sebagai array byte.
MtpStorageInfo
menyimpan informasi tentang unit penyimpanan pada perangkat MTP, yang sesuai dengan Set Data StorageInfo yang dijelaskan dalam bagian 5.2.2 dari spesifikasi MTP. Metode di class tersebut memungkinkan aplikasi mendapatkan string deskripsi, ruang kosong, kapasitas penyimpanan maksimum, ID penyimpanan, dan ID volume unit penyimpanan.MtpDeviceInfo
menyimpan informasi tentang perangkat MTP yang sesuai dengan Set Data DeviceInfo yang dijelaskan pada bagian 5.1.1 spesifikasi MTP. Metode di class tersebut memungkinkan aplikasi mendapatkan produsen, model, nomor seri, dan versi perangkat.MtpObjectInfo
menyimpan informasi tentang objek yang disimpan pada perangkat MTP, yang sesuai dengan Set Data ObjectInfo yang dijelaskan di bagian 5.3.1 spesifikasi MTP. Metode di class tersebut memungkinkan aplikasi mendapatkan ukuran objek, format data, jenis asosiasi, tanggal pembuatan, dan informasi thumbnail.MtpConstants
menyediakan konstanta untuk mendeklarasikan kode format file MTP, jenis pengaitan, dan status perlindungan.
Dukungan untuk perangkat input baru dan peristiwa gerakan
Android 3.1 memperluas subsistem input untuk mendukung perangkat input baru dan jenis peristiwa gerakan baru, di semua tampilan dan jendela. Developer dapat memanfaatkan kemampuan ini agar pengguna dapat berinteraksi dengan aplikasi mereka menggunakan mouse, trackball, joystick, gamepad, dan perangkat lainnya, selain keyboard dan layar sentuh.
Untuk menangani input mouse, scrollwheel, dan trackball, platform ini mendukung dua tindakan peristiwa gerakan baru:
ACTION_SCROLL
, yang menjelaskan lokasi pointer tempat gerakan scroll non-sentuh, seperti dari roda scroll mouse, berlangsung. Dalam MotionEvent, nilai sumbuAXIS_HSCROLL
danAXIS_VSCROLL
menentukan gerakan scroll relatif.ACTION_HOVER_MOVE
, melaporkan posisi mouse saat ini jika tidak ada tombol yang ditekan, serta titik perantara apa pun sejak peristiwaHOVER_MOVE
terakhir. Notifikasi arahkan kursor dan keluar belum didukung.
Untuk mendukung joystick dan gamepad, class InputDevice
menyertakan sumber perangkat input baru ini:
SOURCE_CLASS_JOYSTICK
— perangkat sumber memiliki sumbu joystick.SOURCE_CLASS_BUTTON
— perangkat sumber memiliki tombol atau tombol.SOURCE_GAMEPAD
— perangkat sumber memiliki tombol gamepad sepertiKEYCODE_BUTTON_A
atauKEYCODE_BUTTON_B
. MengimplikasikanSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
— perangkat sumber memiliki sumbu joystick. Menyiratkan SOURCE_CLASS_JOYSTICK.
Untuk mendeskripsikan peristiwa gerakan dari sumber baru ini, serta dari mouse
dan trackball, platform ini kini menentukan kode sumbu pada MotionEvent
, mirip dengan cara menentukan kode tombol pada KeyEvent
. Kode sumbu baru untuk joystick
dan pengontrol game mencakup
AXIS_HAT_X
, AXIS_HAT_Y
, AXIS_RTRIGGER
, AXIS_ORIENTATION
, AXIS_THROTTLE
, dan banyak lagi.
Sumbu MotionEvent
yang ada diwakili oleh AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
, dan AXIS_ORIENTATION
.
Selain itu, MotionEvent
menentukan sejumlah kode sumbu
umum yang digunakan saat framework tidak mengetahui cara memetakan
sumbu tertentu. Perangkat tertentu dapat menggunakan kode sumbu generik untuk meneruskan data gerakan kustom ke aplikasi. Untuk daftar lengkap sumbu dan interpretasi
yang diinginkan, lihat dokumentasi class MotionEvent
.
Platform ini menyediakan peristiwa gerakan ke beberapa aplikasi dalam batch, sehingga satu
peristiwa dapat berisi posisi saat ini dan beberapa yang disebut gerakan historis.
Aplikasi harus menggunakan getHistorySize()
untuk mendapatkan
jumlah sampel historis, lalu mengambil dan memproses semua sampel
historis secara berurutan menggunakan getHistoricalAxisValue()
. Setelah itu, aplikasi harus memproses sampel
saat ini menggunakan getAxisValue()
.
Beberapa sumbu dapat diambil menggunakan metode pengakses khusus. Misalnya,
bukan memanggil getAxisValue()
, aplikasi dapat memanggil getX()
. Sumbu yang memiliki pengakses bawaan mencakup AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
, dan AXIS_ORIENTATION
.
Setiap perangkat input memiliki ID unik yang ditetapkan oleh sistem dan juga dapat menyediakan
beberapa sumber. Jika perangkat menyediakan beberapa sumber, lebih dari satu sumber
dapat memberikan data sumbu menggunakan sumbu yang sama. Misalnya, peristiwa sentuh yang berasal
dari sumber sentuh menggunakan sumbu X untuk data posisi layar, sedangkan peristiwa joystick
yang berasal dari sumber joystick akan menggunakan sumbu X untuk posisi
stik. Karena alasan ini, penting bagi aplikasi untuk menafsirkan nilai
sumbu sesuai dengan sumbernya. Saat menangani peristiwa
gerakan, aplikasi harus menggunakan metode di class InputDevice
untuk menentukan sumbu yang didukung oleh perangkat atau sumber. Secara khusus,
aplikasi dapat menggunakan getMotionRanges()
untuk membuat kueri untuk semua sumbu perangkat atau semua sumbu pada
sumber perangkat tertentu. Dalam kedua kasus tersebut, informasi rentang untuk sumbu yang ditampilkan dalam
objek InputDevice.MotionRange
menentukan sumber untuk
setiap nilai sumbu.
Terakhir, karena peristiwa gerakan dari joystick, gamepad, mouse, dan
trackball bukan peristiwa sentuh, platform ini menambahkan metode callback baru untuk
meneruskannya ke View
sebagai peristiwa gerakan "generik".
Secara khusus, fungsi ini melaporkan peristiwa gerakan non-sentuh ke
View
melalui panggilan ke onGenericMotionEvent()
, bukan ke onTouchEvent()
.
Platform ini mengirim peristiwa gerakan umum dengan cara yang berbeda, bergantung pada
class sumber peristiwa. Peristiwa SOURCE_CLASS_POINTER
menuju ke View
di bawah pointer, mirip dengan cara kerja peristiwa
sentuh. Semua yang lainnya akan diarahkan ke View
yang saat ini difokuskan.
Misalnya, hal ini berarti View
harus mengambil fokus agar dapat
menerima peristiwa joystick. Jika diperlukan, aplikasi dapat menangani peristiwa ini pada
tingkat Aktivitas atau Dialog dengan mengimplementasikan onGenericMotionEvent()
di sana.
Untuk melihat contoh aplikasi yang menggunakan peristiwa gerakan joystick, lihat GameControllerInput dan GameView.
API RTP
Android 3.1 mengekspos API ke stack RTP (Real-time Transport Protocol) bawaan, yang dapat digunakan aplikasi untuk mengelola streaming data secara on-demand atau interaktif. Secara khusus, aplikasi yang menyediakan VOIP, push-to-talk, konferensi, dan streaming audio dapat menggunakan API untuk memulai sesi dan mengirim atau menerima aliran data melalui jaringan yang tersedia.
RTP API tersedia dalam paket android.net.rtp
. Class
mencakup:
RtpStream
, class dasar stream yang mengirim dan menerima paket jaringan dengan payload media melalui RTP.AudioStream
, subclass dariRtpStream
yang membawa payload audio melalui RTP.AudioGroup
, hub audio lokal untuk mengelola dan menggabungkan speaker, mikrofon, danAudioStream
perangkat.AudioCodec
, yang menyimpan kumpulan codec yang Anda tentukan untukAudioStream
.
Untuk mendukung konferensi audio dan penggunaan serupa, aplikasi membuat instance dua class sebagai endpoint untuk streaming:
AudioStream
menentukan endpoint jarak jauh dan terdiri dari pemetaan jaringan danAudioCodec
yang dikonfigurasi.AudioGroup
merepresentasikan endpoint lokal untuk satu atau beberapaAudioStream
.AudioGroup
mencampur semuaAudioStream
dan secara opsional berinteraksi dengan speaker perangkat dan mikrofon secara bersamaan.
Penggunaan yang paling sederhana melibatkan satu endpoint jarak jauh dan endpoint lokal.
Untuk penggunaan yang lebih kompleks, lihat batasan yang dijelaskan untuk
AudioGroup
.
Untuk menggunakan RTP API, aplikasi harus meminta izin dari pengguna dengan
mendeklarasikan <uses-permission
android:name="android.permission.INTERNET">
dalam file manifesnya. Untuk mendapatkan mikrofon perangkat, izin <uses-permission
android:name="android.permission.RECORD_AUDIO">
juga diperlukan.
Widget aplikasi yang ukurannya dapat disesuaikan
Mulai Android 3.1, developer dapat membuat widget layar utama dapat diubah ukurannya — secara horizontal, vertikal, atau di kedua sumbu. Pengguna menyentuh lama widget untuk menampilkan tuas pengubah ukuran, lalu menarik tuas horizontal dan/atau vertikal untuk mengubah ukuran pada petak tata letak.
Developer dapat membuat widget Layar utama apa pun dapat diubah ukurannya dengan menentukan
atribut resizeMode
di metadata AppWidgetProviderInfo
widget. Nilai untuk
atribut resizeMode
mencakup "horizontal", "vertical", dan "none".
Untuk mendeklarasikan widget sebagai dapat diubah ukurannya secara horizontal dan vertikal, berikan nilai
"horizontal|vertical".
Berikut contohnya:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" > </appwidget-provider>
Untuk mengetahui informasi selengkapnya tentang widget Layar utama, lihat dokumentasi Widget Aplikasi.
Framework animasi
- Class ViewPropertyAnimator baru
- Class
ViewPropertyAnimator
baru menyediakan cara yang mudah bagi developer untuk menganimasikan properti tertentu pada objekView
. Class ini mengotomatiskan dan mengoptimalkan animasi properti serta mempermudah pengelolaan beberapa animasi simultan pada objekView
.Penggunaan
ViewPropertyAnimator
sangat mudah. Guna menganimasikan properti untukView
, panggilanimate()
guna membuat objekViewPropertyAnimator
untukView
tersebut. Gunakan metode diViewPropertyAnimator
untuk menentukan properti yang akan dianimasikan dan cara menganimasikannya. Misalnya, untuk memudarkanView
menjadi transparan, panggilalpha(0);
. ObjekViewPropertyAnimator
menangani detail cara mengonfigurasi classAnimator
yang mendasarinya dan memulainya, lalu merender animasi.
- Class
- Warna latar belakang animasi
- Metode
getBackgroundColor()
dansetBackgroundColor(int)
baru memungkinkan Anda mendapatkan/menetapkan warna latar belakang di balik animasi, untuk animasi jendela saja. Saat ini latar belakang harus hitam, dengan tingkat alfa yang diinginkan.
- Metode
- Mendapatkan pecahan animasi dari
ViewAnimator
- Metode
getAnimatedFraction()
baru memungkinkan Anda mendapatkan fraksi animasi saat ini — fraksi berlalu/terinterpolasi yang digunakan dalam update frame terbaru — dariValueAnimator
.
- Metode
Framework UI
- Rendering paksa lapisan
- Metode
buildLayer()
baru memungkinkan aplikasi memaksa lapisan View dibuat dan View tersebut langsung dirender ke dalamnya. Misalnya, aplikasi dapat menggunakan metode ini untuk merender View ke dalam lapisannya sebelum memulai animasi. Jika View kompleks, merendernya ke dalam lapisan sebelum memulai animasi akan menghindari frame yang dilewati.
- Metode
- Jarak kamera
- Aplikasi dapat menggunakan metode baru
setCameraDistance(float)
untuk menyetel jarak dari kamera ke Tampilan. Hal ini memberi aplikasi kontrol yang lebih baik atas transformasi 3D Tampilan, seperti rotasi.
- Aplikasi dapat menggunakan metode baru
- Mendapatkan tampilan kalender dari DatePicker
- Metode
getCalendarView()
baru memungkinkan Anda mendapatkanCalendarView
dari instanceDatePicker
.
- Metode
- Mendapatkan callback saat tampilan dilepas
View.OnAttachStateChangeListener
baru memungkinkan Anda menerima callback saat View dipasang atau dilepas dari jendelanya. GunakanaddOnAttachStateChangeListener()
untuk menambahkan pemroses danaddOnAttachStateChangeListener()
untuk menghapusnya.
- Pemroses breadcrumb fragmen, tanda tangan onInflate() baru
- Metode baru,
setOnBreadCrumbClickListener()
, menyediakan hook untuk memungkinkan aplikasi menangkap klik breadcrumb dan mengambil tindakan apa pun yang diperlukan sebelum membuka entri data sebelumnya atau fragmen yang diklik. - Dalam class
Fragment
,onInflate(attrs, savedInstanceState)
tidak digunakan lagi. Sebagai gantinya, gunakanonInflate(activity, attrs, savedInstanceState)
.
- Metode baru,
- Tampilkan hasil penelusuran di tab baru
- Kunci data
EXTRA_NEW_SEARCH
untuk intentACTION_WEB_SEARCH
memungkinkan Anda membuka penelusuran di tab browser baru, bukan di tab yang sudah ada.
- Kunci data
- Kursor teks drawable
- Kini Anda dapat menentukan drawable untuk digunakan sebagai kursor teks menggunakan
atribut resource baru
textCursorDrawable
.
- Kini Anda dapat menentukan drawable untuk digunakan sebagai kursor teks menggunakan
atribut resource baru
- Menyetel turunan yang ditampilkan dalam tampilan jarak jauh
- Metode praktis baru,
setDisplayedChild(viewId, childIndex)
, tersedia di subclassRemoteViews
, untuk memungkinkan Anda menetapkan turunan yang ditampilkan dalam subclassViewAnimator
danAdapterViewAnimator
sepertiAdapterViewFlipper
,StackView
,ViewFlipper
, danViewSwitcher
.
- Metode praktis baru,
- Tombol umum untuk gamepad dan perangkat input lainnya
KeyEvent
menambahkan berbagai kode tombol generik untuk mengakomodasi tombol gamepad. Class ini juga menambahkanisGamepadButton(int)
dan beberapa metode helper lainnya untuk menangani kode tombol.
Grafis
- Helper untuk mengelola bitmap
setHasAlpha(boolean)
memungkinkan aplikasi menunjukkan bahwa semua piksel dalam Bitmap diketahui sebagai buram (salah) atau bahwa beberapa piksel mungkin berisi nilai alfa yang tidak buram (benar). Perlu diperhatikan, untuk beberapa konfigurasi (seperti RGB_565), panggilan ini akan diabaikan, karena tidak mendukung nilai alfa per piksel. Hal ini dimaksudkan sebagai petunjuk menggambar, seperti dalam beberapa kasus, bitmap yang diketahui buram dapat mengambil kasus gambar yang lebih cepat daripada yang mungkin memiliki nilai alfa per piksel yang tidak buram.getByteCount()
mendapatkan ukuran Bitmap dalam byte.getGenerationId()
memungkinkan aplikasi mengetahui apakah Bitmap telah dimodifikasi, seperti untuk caching.sameAs(android.graphics.Bitmap)
menentukan apakah Bitmap tertentu berbeda dengan Bitmap saat ini, dalam dimensi, konfigurasi, atau data piksel.
- Menetapkan lokasi dan rotasi kamera
Camera
menambahkan dua metode baru,rotate()
dansetLocation()
, untuk mengontrol lokasi kamera, untuk transformasi 3D.
Jaringan
- Penguncian Wi-Fi berperforma tinggi
- Penguncian Wi-Fi berperforma tinggi yang baru memungkinkan aplikasi mempertahankan
koneksi Wi-Fi berperforma tinggi bahkan saat layar perangkat nonaktif.
Aplikasi yang melakukan streaming musik, video, atau suara untuk jangka waktu yang lama dapat memperoleh
kunci Wi-Fi berperforma tinggi untuk memastikan performa streaming bahkan saat layar
nonaktif. Karena menggunakan lebih banyak daya, aplikasi harus memperoleh
Wi-Fi berperforma tinggi saat diperlukan koneksi aktif
yang berjalan lama.
Untuk membuat kunci berperforma tinggi, teruskan
WIFI_MODE_FULL_HIGH_PERF
sebagai mode kunci dalam panggilan kecreateWifiLock()
.
- Penguncian Wi-Fi berperforma tinggi yang baru memungkinkan aplikasi mempertahankan
koneksi Wi-Fi berperforma tinggi bahkan saat layar perangkat nonaktif.
Aplikasi yang melakukan streaming musik, video, atau suara untuk jangka waktu yang lama dapat memperoleh
kunci Wi-Fi berperforma tinggi untuk memastikan performa streaming bahkan saat layar
nonaktif. Karena menggunakan lebih banyak daya, aplikasi harus memperoleh
Wi-Fi berperforma tinggi saat diperlukan koneksi aktif
yang berjalan lama.
- Statistik lalu lintas lainnya
- Aplikasi kini dapat mengakses statistik tentang lebih banyak jenis penggunaan jaringan
menggunakan metode baru di
TrafficStats
. Aplikasi dapat menggunakan metode untuk mendapatkan statistik UDP, jumlah paket, TCP mengirim/menerima byte dan segmen payload untuk UID tertentu.
- Aplikasi kini dapat mengakses statistik tentang lebih banyak jenis penggunaan jaringan
menggunakan metode baru di
- Nama pengguna autentikasi SIP
- Aplikasi kini dapat memperoleh dan menetapkan nama pengguna autentikasi SIP untuk profil
menggunakan
metode baru
getAuthUserName()
dansetAuthUserName()
.
- Aplikasi kini dapat memperoleh dan menetapkan nama pengguna autentikasi SIP untuk profil
menggunakan
metode baru
Pengelola Download
- Penanganan download yang telah selesai
- Aplikasi kini dapat memulai download yang memberi tahu pengguna hanya setelah
selesai. Untuk memulai jenis download ini, aplikasi meneruskan
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
dalam metodesetNotificationVisibility()
objek permintaan. - Metode baru,
addCompletedDownload()
, memungkinkan aplikasi menambahkan file ke database download sehingga dapat dikelola oleh aplikasi Download.
- Aplikasi kini dapat memulai download yang memberi tahu pengguna hanya setelah
selesai. Untuk memulai jenis download ini, aplikasi meneruskan
- Tampilkan download yang diurutkan menurut ukuran
- Aplikasi dapat memulai aplikasi Download dalam mode urutkan menurut ukuran dengan
menambahkan
INTENT_EXTRAS_SORT_BY_SIZE
tambahan baru ke intentACTION_VIEW_DOWNLOADS
.
- Aplikasi dapat memulai aplikasi Download dalam mode urutkan menurut ukuran dengan
menambahkan
Framework IME
- Mendapatkan kunci nilai ekstra metode input
InputMethodSubtype
menambahkan metodecontainsExtraValueKey()
untuk memeriksa apakah string ExtraValue disimpan untuk subjenis dan metodegetExtraValueOf()
untuk mengekstrak nilai kunci tertentu dari peta hash ExtraValue.
Media
- Format audio streaming baru
- Framework media ini menambahkan dukungan bawaan untuk konten ADTS AAC mentah, untuk audio streaming yang ditingkatkan, serta dukungan untuk audio FLAC, untuk konten audio terkompresi (lossless) berkualitas tertinggi. Lihat dokumen Format Media yang Didukung untuk informasi selengkapnya.
Kontrol peluncuran pada aplikasi yang dihentikan
Mulai Android 3.1, pengelola paket sistem melacak aplikasi yang berada dalam status berhenti dan menyediakan cara untuk mengontrol peluncurannya dari proses latar belakang dan aplikasi lainnya.
Perhatikan bahwa status dihentikan aplikasi tidak sama dengan status berhenti Aktivitas. Sistem mengelola dua status berhenti tersebut secara terpisah.
Platform ini menetapkan dua flag intent baru yang memungkinkan pengirim menentukan apakah Intent harus diizinkan untuk mengaktifkan komponen dalam aplikasi yang dihentikan.
FLAG_INCLUDE_STOPPED_PACKAGES
— Menyertakan filter intent aplikasi yang dihentikan dalam daftar target potensial yang akan di-resolve.FLAG_EXCLUDE_STOPPED_PACKAGES
— Kecualikan filter intent aplikasi yang dihentikan dari daftar target potensial.
Jika tidak satu pun atau kedua flag ini ditentukan dalam intent, perilaku defaultnya adalah menyertakan filter aplikasi yang dihentikan dalam daftar target potensial.
Perlu diperhatikan bahwa sistem menambahkan FLAG_EXCLUDE_STOPPED_PACKAGES
ke semua intent
siaran. Hal ini dilakukan untuk mencegah siaran dari layanan latar belakang meluncurkan
komponen aplikasi yang dihentikan secara tidak sengaja atau tidak perlu.
Layanan atau aplikasi latar belakang dapat mengganti perilaku ini dengan menambahkan
tanda FLAG_INCLUDE_STOPPED_PACKAGES
ke intent
siaran yang harus diizinkan untuk mengaktifkan aplikasi yang dihentikan.
Aplikasi berada dalam status berhenti saat pertama kali diinstal, tetapi belum diluncurkan dan saat dihentikan secara manual oleh pengguna (dalam Kelola Aplikasi).
Notifikasi peluncuran dan upgrade pertama aplikasi
Platform ini menambahkan notifikasi yang lebih baik tentang peluncuran pertama aplikasi dan upgrade melalui dua tindakan intent baru:
ACTION_PACKAGE_FIRST_LAUNCH
— Dikirim ke paket penginstal aplikasi saat aplikasi tersebut pertama kali diluncurkan (yaitu, saat pertama kali dipindahkan dari status berhenti). Data berisi nama paket.ACTION_MY_PACKAGE_REPLACED
— Memberi tahu aplikasi bahwa aplikasi telah diupdate, dengan versi baru yang diinstal pada versi yang sudah ada. Ini hanya dikirim ke aplikasi yang diganti. Tabel ini tidak berisi data tambahan apa pun. Untuk menerimanya, deklarasikan filter intent untuk tindakan ini. Anda dapat menggunakan intent untuk memicu kode yang membantu mengembalikan aplikasi Anda dalam kondisi berjalan yang benar setelah upgrade.Intent ini dikirim langsung ke aplikasi, tetapi hanya jika aplikasi diupgrade saat aplikasi dalam status dimulai (bukan dalam status dihentikan).
Utilitas inti
- Cache LRU
- Class
LruCache
baru memungkinkan aplikasi Anda mendapatkan manfaat dari caching yang efisien. Aplikasi dapat menggunakan class tersebut untuk mengurangi waktu yang dihabiskan untuk menghitung atau mendownload data dari jaringan, sekaligus mempertahankan jejak memori yang logis untuk data yang di-cache.LruCache
adalah cache yang menyimpan referensi kuat ke sejumlah nilai yang terbatas. Setiap kali diakses, nilai tersebut akan dipindahkan ke head antrean. Saat nilai ditambahkan ke cache lengkap, nilai di akhir antrean tersebut akan dikeluarkan dan memenuhi syarat untuk pembersihan sampah memori.
- Class
- Deskriptor file sebagai
int
- Anda kini bisa mendapatkan int deskriptor file native untuk
ParcelFileDescriptor
menggunakan salah satu metode barugetFd()
ataudetachFd()
.
- Anda kini bisa mendapatkan int deskriptor file native untuk
WebKit
- Cookie skema file
CookieManager
kini mendukung cookie yang menggunakan skema URIfile:
. Anda dapat menggunakansetAcceptFileSchemeCookies()
untuk mengaktifkan/menonaktifkan dukungan bagi cookie skema file, sebelum membuat instanceWebView
atauCookieManager
. Dalam instanceCookieManager
, Anda dapat memeriksa apakah cookie skema file diaktifkan dengan memanggilallowFileSchemeCookies()
.
- Notifikasi permintaan login
- Untuk mendukung fitur login otomatis browser yang diperkenalkan pada Android 3.0, metode baru
onReceivedLoginRequest()
memberi tahu aplikasi host bahwa permintaan login otomatis untuk pengguna telah diproses.
- Untuk mendukung fitur login otomatis browser yang diperkenalkan pada Android 3.0, metode baru
- Menghapus class dan antarmuka
- Beberapa class dan antarmuka dihapus dari API publik, setelah sebelumnya berstatus tidak digunakan lagi. Lihat Laporan Perbedaan API untuk mengetahui informasi selengkapnya.
Browser
Aplikasi Browser menambahkan fitur berikut untuk mendukung aplikasi web:
- Dukungan untuk pemutaran inline video yang disematkan dalam tag
<video>
HTML5. Pemutaran dilakukan dengan akselerasi hardware jika memungkinkan. - Dukungan lapisan untuk elemen posisi tetap bagi semua situs (seluler dan desktop).
Konstanta fitur baru
Platform ini menambahkan konstanta fitur hardware baru yang dapat dideklarasikan developer
dalam manifes aplikasi mereka, untuk memberi tahu entity eksternal seperti Google
Play tentang persyaratan aplikasi untuk kemampuan hardware baru yang didukung
dalam versi platform ini. Developer mendeklarasikan konstanta ini dan
konstanta fitur lainnya dalam elemen manifes <uses-feature>
.
android.hardware.usb.accessory
— Aplikasi menggunakan USB API untuk berkomunikasi dengan perangkat hardware eksternal yang terhubung melalui USB dan berfungsi sebagai host.android.hardware.usb.host
— Aplikasi ini menggunakan USB API untuk berkomunikasi dengan perangkat hardware eksternal yang terhubung melalui USB dan berfungsi sebagai perangkat.
Google Play memfilter aplikasi berdasarkan fitur yang dideklarasikan dalam elemen manifes <uses-feature>
. Untuk mengetahui informasi selengkapnya tentang
mendeklarasikan fitur dalam manifes aplikasi, baca Filter
Google Play.
Laporan Perbedaan API
Untuk melihat tampilan mendetail semua perubahan API di Android 3.1 (API Level 12), lihat Laporan Perbedaan API.
API Level
Platform Android 3.1 menghadirkan versi API framework yang terupdate. Android 3.1 API diberi ID bilangan bulat — 12 — 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.1 di aplikasi,
Anda perlu mengompilasi aplikasi terhadap library Android yang disediakan di
platform Android 3.1 SDK. Bergantung pada kebutuhan, Anda
mungkin juga
perlu menambahkan atribut android:minSdkVersion="12"
ke elemen <uses-sdk>
dalam manifes
aplikasi.
Untuk mengetahui informasi selengkapnya, baca Apa itu API Level?