Level API: 12
Bagi developer, platform Android 3.1
(HONEYCOMB_MR1
) tersedia sebagai
yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup
library dan image sistem Android, serta serangkaian skin emulator dan
banyak lagi. Platform yang dapat didownload tidak menyertakan library eksternal.
Untuk pengembang, platform Android 3.1 tersedia sebagai yang dapat didownload untuk Android SDK. Platform yang dapat didownload mencakup library dan image sistem Android, serta serangkaian skin emulator dan banyak lagi. Untuk memulai pengembangan atau pengujian terhadap Android 3.1, menggunakan Android SDK Manager untuk mendownload platform ke SDK Anda.
Ringkasan API
Bagian di bawah ini memberikan ringkasan teknis tentang apa yang baru untuk developer di Android 3.1, termasuk fitur baru dan perubahan dalam API kerangka kerja sejak ke versi sebelumnya.
API USB
Android 3.1 memperkenalkan API baru yang andal untuk mengintegrasikan periferal yang terhubung dengan aplikasi yang berjalan di platform. API didasarkan pada stack dan layanan USB (Universal Serial Bus) yang yang disertakan dalam platform, termasuk dukungan untuk {i>host<i} USB dan perangkat interaksi. Dengan menggunakan API, pengembang bisa membuat aplikasi yang dapat menemukan, berkomunikasi, dan mengelola berbagai jenis perangkat yang USB.
Stack dan API membedakan dua tipe dasar perangkat keras USB, berdasarkan apakah perangkat Android bertindak sebagai host atau hardware eksternal bertindak sebagai host:
- Perangkat USB adalah hardware terhubung yang bergantung pada Perangkat yang didukung Android untuk berfungsi sebagai host. Misalnya, sebagian besar perangkat input, {i>mouse<i}, dan joystick adalah perangkat USB, begitu juga banyak kamera, hub, dan sebagainya.
- Aksesori USB adalah hardware yang terhubung dan memiliki USB {i>host<i}, menyediakan daya, dan dirancang untuk berkomunikasi dengan perangkat Android melalui USB, Berbagai periferal dapat terhubung sebagai aksesori, mulai dari pengontrol robot hingga peralatan musik, sepeda olahraga, dan lain-lain.
Untuk kedua jenis — perangkat USB dan aksesori USB — API USB platform mendukung penemuan melalui siaran intent saat terpasang atau terlepas, serta antarmuka standar, endpoint, dan mode transfer (kontrol, massal, dan interupsi).
USB API tersedia dalam paket android.hardware.usb
. Tujuan
utama adalah UsbManager
, yang menyediakan
metode bantuan untuk mengidentifikasi
dan berkomunikasi dengan
perangkat USB maupun aksesori USB. Aplikasi dapat memperoleh instance
UsbManager
, lalu buat kueri untuk daftar lampiran
perangkat atau aksesori, lalu berkomunikasi
dengan atau mengelolanya.
UsbManager
juga mendeklarasikan tindakan intent yang
siaran sistem, untuk mengumumkan kapan
perangkat USB atau aksesori terpasang atau
terlepas.
Kelas lainnya mencakup:
UsbDevice
, class yang mewakili elemen perangkat keras yang tersambung sebagai perangkat USB (dengan perangkat berbasis Android yang bertindak sebagai {i>host<i}).UsbAccessory
, yang mewakili hardware eksternal terhubung sebagai host USB (dengan perangkat berbasis Android yang bertindak sebagai USB perangkat).UsbInterface
danUsbEndpoint
, yang menyediakan akses ke USB standar antarmuka dan endpoint untuk sebuah perangkat.UsbDeviceConnection
danUsbRequest
, untuk mengirim serta menerima data dan kontrol pesan ke atau dari perangkat USB, secara sinkron maupun asinkron.UsbConstants
, yang menyediakan konstanta untuk mendeklarasikan jenis endpoint, class perangkat, dan sebagainya.
Perhatikan bahwa meskipun stack USB sudah dibangun ke dalam platform, dukungan sebenarnya untuk mode host USB dan aksesori terbuka di perangkat tertentu ditentukan oleh produsennya. Secara khusus, mode {i>host<i} mengandalkan sumber daya USB perangkat keras pengontrol di perangkat yang didukung Android.
Selain itu, developer dapat meminta pemfilteran di Google Play, sehingga aplikasi mereka tidak tersedia bagi pengguna yang perangkatnya tidak menyediakan dukungan USB yang tepat. Untuk meminta pemfilteran, tambahkan salah satu atau kedua elemen di bawah ini ke manifes aplikasi, sebagaimana diperlukan:
- Apakah aplikasi hanya dapat dilihat oleh perangkat yang mendukung USB
mode host (koneksi perangkat USB), deklarasikan elemen ini:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- Apakah aplikasi hanya dapat dilihat oleh perangkat yang mendukung USB
aksesori (koneksi host USB), deklarasikan elemen ini:
<uses-feature android:name="android.hardware.usb.accessory" android:required="true">
Untuk informasi lengkap tentang cara mengembangkan aplikasi yang berinteraksi dengan aksesori USB, lihat dokumentasi developer.
Untuk melihat aplikasi contoh yang menggunakan API host USB, lihat Pengujian ADB dan Missile Peluncur
API MTP/PTP
Android 3.1 mengekspos MTP API baru yang memungkinkan aplikasi berinteraksi secara langsung dengan kamera yang terhubung dan perangkat PTP lainnya. API baru ini memudahkan aplikasi untuk menerima pemberitahuan saat perangkat dipasang dan dilepas, mengelola file dan penyimpanan di perangkat tersebut, dan mentransfer file serta metadata ke dan dari mereka. MTP API menerapkan subset PTP (Picture Transfer Protocol) spesifikasi MTP (Media Transfer Protocol).
MTP API tersedia dalam paket android.mtp
dan menyediakan
kelas tersebut:
MtpDevice
mengenkapsulasi perangkat MTP yang terhubung melalui USB {i>host bus<i}. Sebuah aplikasi dapat membuat instance objek jenis ini dan kemudian menggunakan metodenya untuk mendapatkan informasi tentang perangkat dan objek yang disimpan di dalamnya, serta membuka koneksi dan mentransfer data. Beberapa metodenya antara lain:getObjectHandles()
menampilkan daftar handle untuk semua objek di perangkat yang sesuai dengan format dan induk yang ditentukan. Untuk mendapatkan informasi tentang suatu objek, aplikasi dapat meneruskan handle kegetObjectInfo()
.importFile()
memungkinkan aplikasi menyalin data untuk sebuah objek ke file di perangkat eksternal Storage. Panggilan ini dapat memblokir selama jumlah waktu yang arbitrer bergantung pada ukuran data dan kecepatan perangkat, jadi harus dibuat dari {i>spearate<i} .open()
memungkinkan aplikasi membuka perangkat MTP/PTP yang terhubung.- Pengembalian dengan biaya
getThumbnail()
thumbnail objek sebagai array byte.
MtpStorageInfo
menyimpan informasi tentang penyimpanan unit pada perangkat MTP, sesuai dengan {i>Dataset<i} StorageInfo yang dijelaskan di bagian 5.2.2 dari spesifikasi MTP. Metode dalam class memungkinkan aplikasi mendapatkan string deskripsi unit penyimpanan, ruang kosong, kapasitas penyimpanan maksimum, ID penyimpanan, dan ID volume.MtpDeviceInfo
menyimpan informasi tentang perangkat MTP yang sesuai dengan Set Data DeviceInfo yang dijelaskan di bagian 5.1.1 MTP spesifikasi pendukung. Metode di class ini memungkinkan aplikasi mendapatkan produsen, model, nomor seri, dan versi.MtpObjectInfo
menyimpan informasi tentang objek yang disimpan pada perangkat MTP, sesuai dengan Set Data ObjectInfo yang dijelaskan di bagian 5.3.1 dari spesifikasi MTP. Metode dalam class ini memungkinkan aplikasi mendapatkan ukuran objek, format data, jenis pengaitan, tanggal pembuatan, dan thumbnail tidak akurat atau tidak sesuai.MtpConstants
menyediakan konstanta untuk mendeklarasikan file MTP kode format, jenis pengaitan, dan status perlindungan.
Dukungan untuk perangkat input dan peristiwa gerakan baru
Android 3.1 memperluas subsistem input untuk mendukung perangkat input baru jenis peristiwa gerakan, di semua tampilan dan jendela. Pengembang dapat mengembangkan kemampuan ini agar pengguna dapat berinteraksi dengan aplikasi mereka menggunakan {i>mouse<i}, trackball, joystick, gamepad, dan perangkat lain, selain keyboard dan layar sentuh.
Untuk menangani input mouse, scrollwheel, dan trackball, platform ini mendukung dua tindakan peristiwa gerakan baru:
ACTION_SCROLL
, yang mendeskripsikan pointer lokasi tempat gerakan scroll non-sentuh, seperti dari roda scroll mouse, berlangsung. Dalam MotionEvent, nilai sumbuAXIS_HSCROLL
danAXIS_VSCROLL
menentukan scroll relatif Google.ACTION_HOVER_MOVE
, melaporkan aktivitas posisi mouse ketika tidak ada tombol yang ditekan, serta setiap perantara poin sejak peristiwaHOVER_MOVE
terakhir. Arahkan kursor ke mode masuk dan keluar notifikasi belum didukung.
Untuk mendukung joystick dan gamepad, class InputDevice
menyertakan sumber perangkat input baru berikut:
SOURCE_CLASS_JOYSTICK
— sumber perangkat memiliki sumbu joystick.SOURCE_CLASS_BUTTON
— sumber perangkat memiliki tombol atau tombol.SOURCE_GAMEPAD
— perangkat sumber memiliki tombol gamepad sepertiKEYCODE_BUTTON_A
atauKEYCODE_BUTTON_B
. MenyiratkanSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
— perangkat sumber memiliki sumbu joystick. Menyiratkan SOURCE_CLASS_JOYSTICK.
Untuk menjelaskan peristiwa gerakan yang berasal dari sumber baru ini, serta yang berasal dari tikus
dan trackball, platform sekarang menentukan kode sumbu di MotionEvent
, mirip dengan cara menentukan kode tombol di 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 direpresentasikan dengan 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 yang digunakan saat kerangka kerja tidak mengetahui cara memetakan
sumbu tertentu. Perangkat tertentu dapat menggunakan kode sumbu umum untuk meneruskan teks
data gerakan ke aplikasi. Untuk daftar lengkap sumbu dan tujuannya
interpretasi, lihat dokumentasi class MotionEvent
.
Platform ini menyediakan peristiwa gerakan ke aplikasi dalam batch, sehingga satu
dapat berisi posisi saat ini dan beberapa hal yang disebut gerakan historis.
Aplikasi harus menggunakan getHistorySize()
untuk mendapatkan
jumlah sampel historis, kemudian mengambil dan memproses semua
sampel secara berurutan menggunakan getHistoricalAxisValue()
. Setelah itu, aplikasi harus memproses
contoh menggunakan getAxisValue()
.
Beberapa sumbu dapat diambil menggunakan metode pengakses khusus. Misalnya,
Aplikasi dapat memanggil getX()
, bukan memanggil getAxisValue()
. 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 memberikan
beberapa sumber. Jika perangkat menyediakan beberapa sumber, maka lebih dari satu sumber
dapat menyediakan data sumbu
menggunakan sumbu yang sama. Misalnya, peristiwa sentuh yang terjadi
dari sumber sentuh menggunakan sumbu X untuk data posisi layar, sedangkan joystick
peristiwa yang berasal dari sumber joystick akan menggunakan sumbu X untuk posisi stik
sebagai gantinya. Karena alasan ini, penting bagi aplikasi
untuk menafsirkan sumbu
sesuai dengan sumber dari mana mereka berasal. Saat menangani gerakan
aplikasi, aplikasi harus menggunakan metode di InputDevice
untuk menentukan sumbu yang didukung oleh perangkat atau sumber. Secara khusus, Anda bisa
aplikasi dapat menggunakan getMotionRanges()
untuk membuat kueri terhadap semua sumbu perangkat atau semua sumbu dari suatu perangkat
sumber perangkat. Dalam kedua kasus tersebut, informasi rentang untuk sumbu yang ditampilkan di
objek InputDevice.MotionRange
menentukan sumber untuk
setiap nilai sumbu.
Terakhir, karena peristiwa gerakan dari
joystick, {i>gamepad<i}, {i>mouse<i}, dan
trackball bukanlah peristiwa sentuh, platform menambahkan metode callback baru untuk
meneruskannya ke View
sebagai "generik" kejadian gerakan.
Secara khusus, laporan ini melaporkan peristiwa gerakan non-sentuh ke
View
melalui panggilan ke onGenericMotionEvent()
, bukan ke onTouchEvent()
.
Platform mengirim peristiwa gerakan generik secara berbeda, tergantung pada
peristiwa. Acara SOURCE_CLASS_POINTER
arahkan ke View
di bawah pointer, mirip dengan cara menyentuh
peristiwa bekerja. Yang lainnya mengarah ke View
yang saat ini difokuskan.
Misalnya, ini berarti View
harus fokus untuk
menerima peristiwa joystick. Jika diperlukan, aplikasi dapat menangani peristiwa ini di
di level Aktivitas atau Dialog dengan mengimplementasikan onGenericMotionEvent()
di sana.
Untuk melihat contoh aplikasi yang menggunakan gerakan joystick peristiwa, lihat GameControllerInput dan GameView.
API RTP
Android 3.1 mengekspos API ke RTP (Real-time Transport Protocol) bawaannya , yang dapat digunakan aplikasi untuk mengelola data interaktif atau on demand melakukan streaming. Secara khusus, aplikasi yang menyediakan VOIP, {i>push-to-talk<i}, konferensi, dan streaming audio dapat menggunakan API untuk memulai sesi dan mengirimkan atau menerima aliran data melalui jaringan yang tersedia.
RTP API tersedia dalam paket android.net.rtp
. Kelas
termasuk:
RtpStream
, class dasar aliran data yang mengirim dan menerima paket jaringan dengan {i> payload<i} media melalui RTP.AudioStream
, subclass dariRtpStream
yang membawa payload audio melalui RTP.AudioGroup
, hub audio lokal untuk mengelola dan mencampur speaker perangkat, mikrofon, danAudioStream
.AudioCodec
, yang menyimpan kumpulan codec yang 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 pemetaan jaringan danAudioCodec
yang dikonfigurasi.AudioGroup
mewakili endpoint lokal untuk satuAudioStream
atau lebih. MixAudioGroup
semuaAudioStream
dan secara opsional berinteraksi dengan perangkat speaker dan mikrofon pada saat yang sama.
Penggunaan paling sederhana melibatkan satu endpoint jarak jauh dan endpoint lokal.
Untuk penggunaan yang lebih rumit, 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 mereka dapat diubah ukurannya — secara horizontal, vertikal, atau pada kedua sumbu. Pengguna menyentuh lama untuk menampilkan tuas pengubah ukuran, lalu tarik area horizontal dan/atau vertikal {i>handle<i} untuk mengubah ukuran pada kisi tata letak.
Developer dapat membuat widget Layar utama dapat diubah ukurannya dengan menentukan
Atribut resizeMode
dalam metadata AppWidgetProviderInfo
widget. Nilai untuk
Atribut resizeMode
mencakup "horizontal", "vertikal", dan "tidak ada".
Untuk mendeklarasikan widget sebagai dapat diubah ukurannya secara horizontal dan vertikal, berikan nilai
"horizontal|vertikal".
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 informasi selengkapnya tentang widget Layar utama, lihat Widget Aplikasi dokumentasi tambahan.
Framework animasi
- Class ViewPropertyAnimator baru
- Class
ViewPropertyAnimator
baru memberikan nyaman cara bagi developer untuk menganimasikan properti tertentu pada objekView
. Kelas otomatis dan mengoptimalkan animasi properti dan membuatnya lebih mudah untuk mengelola beberapa animasi yang bersamaan pada objekView
.Penggunaan
ViewPropertyAnimator
sangat mudah. Untuk menganimasikan propertiView
, panggilanimate()
untuk buat objekViewPropertyAnimator
untukView
tersebut. Gunakan diViewPropertyAnimator
untuk menentukan properti yang akan menganimasikan dan cara menganimasikannya. Misalnya, untuk memudarkanView
menjadi transparan, panggilalpha(0);
. ObjekViewPropertyAnimator
menangani detail konfigurasi classAnimator
yang mendasarinya dan memulainya, lalu merender animasi.
- Class
- Warna latar belakang animasi
getBackgroundColor()
baru dan MetodesetBackgroundColor(int)
memungkinkan Anda mendapatkan/menyetel warna latar belakang di balik animasi, untuk animasi jendela saja. Saat ini, latar belakang harus berwarna hitam, dengan level alfa apa pun yang diinginkan.
- Mendapatkan animasi pecahan dari
ViewAnimator
getAnimatedFraction()
baru metode memungkinkan Anda mendapatkan fraksi animasi saat ini — fraksi yang berlalu/interpolasi yang digunakan dalam update frame terbaru — dariValueAnimator
.
Framework UI
- Rendering paksa lapisan
- Metode
buildLayer()
baru memungkinkan aplikasi memaksa layer View dibuat dan View langsung dirender. Misalnya, aplikasi bisa menggunakan metode ini untuk merender Tampilan ke dalam {i>layer <i}sebelum memulai animasi. Jika View bersifat kompleks, merendernya menjadi {i>layer<i} sebelum memulai animasi akan menghindari terjadinya {i>frame<i}.
- Metode
- Jarak kamera
- Aplikasi dapat menggunakan metode baru
setCameraDistance(float)
untuk menyetel jarak dari kamera ke View. 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
dariDatePicker
di instance Compute Engine.
- Metode
- Mendapatkan callback saat tampilan dilepas
View.OnAttachStateChangeListener
baru memungkinkan Anda terima callback saat View dikaitkan atau dilepas dari jendelanya. GunakanaddOnAttachStateChangeListener()
untuk menambahkan pemroses danaddOnAttachStateChangeListener()
untuk menghapusnya.
- Pemroses breadcrumb fragmen, tanda tangan onInflate() baru
- Metode baru,
setOnBreadCrumbClickListener()
, menyediakan hook agar aplikasi mencegat klik fragmen-breadcrumb dan mengambil tindakan yang diperlukan sebelum membuka entri data sebelumnya atau fragmen yang diklik. - Di 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 yang sudah ada.
- Kunci data
- Kursor teks drawable
- Kini Anda bisa menetapkan drawable yang akan digunakan sebagai kursor teks dengan menggunakan
atribut resource
textCursorDrawable
.
- Kini Anda bisa menetapkan drawable yang akan digunakan sebagai kursor teks dengan menggunakan
atribut resource
- Menyetel turunan yang ditampilkan dalam tampilan jarak jauh
- Metode praktis baru,
setDisplayedChild(viewId, childIndex)
, tersedia dalam subclassRemoteViews
, untuk memungkinkan Anda menyetel turunan yang ditampilkan diViewAnimator
dan SubclassAdapterViewAnimator
sepertiAdapterViewFlipper
,StackView
,ViewFlipper
, danViewSwitcher
.
- Metode praktis baru,
- Tombol umum untuk gamepad dan perangkat input lainnya
KeyEvent
menambahkan rentang kode tombol generik ke mengakomodasi tombol gamepad. Kelas itu juga menambahkanisGamepadButton(int)
dan beberapa lainnya metode helper untuk menangani kode tombol.
Grafik
- Helper untuk mengelola bitmap
setHasAlpha(boolean)
memungkinkan aplikasi menunjukkan bahwa semua piksel dalam Bitmap diketahui buram (salah) atau beberapa piksel dapat berisi nilai alfa yang tidak buram (true). Catatan, untuk beberapa konfigurasi (seperti sebagai RGB_565), panggilan ini diabaikan, karena tidak mendukung alfa per piksel masing-masing. Ini dimaksudkan sebagai petunjuk menggambar, seperti dalam beberapa kasus bitmap yang dikenal menjadi buram dapat mengambil kasus gambar yang lebih cepat daripada yang mungkin memiliki nilai alfa per piksel.getByteCount()
mendapatkan ukuran Bitmap dalam {i>byte.<i}getGenerationId()
memungkinkan aplikasi menemukan apakah Bitmap telah dimodifikasi, misalnya untuk caching.sameAs(android.graphics.Bitmap)
menentukan apakah Bitmap tertentu berbeda dari Bitmap saat ini, dalam dimensinya, konfigurasi, atau data piksel.
- Menyetel lokasi dan rotasi kamera
Camera
menambahkan dua metode barurotate()
dansetLocation()
untuk atas lokasi kamera, untuk transformasi 3D.
Jaringan
- Kunci Wi-Fi berperforma tinggi
- Penguncian Wi-Fi performa tinggi yang baru
memungkinkan aplikasi menjaga
koneksi Wi-Fi berkinerja tinggi bahkan saat layar perangkat mati.
Aplikasi yang melakukan streaming musik, video, atau suara dalam waktu lama dapat memperoleh
kunci Wi-Fi berperforma tinggi untuk memastikan performa streaming bahkan saat layar
nonaktif. Karena menggunakan lebih banyak daya, aplikasi harus mendapatkan
Wi-Fi performa tinggi ketika diperlukan
aktivitas yang berjalan lama
koneksi jarak jauh.
Untuk membuat kunci berperforma tinggi, teruskan
WIFI_MODE_FULL_HIGH_PERF
sebagai mode kunci di panggilan kecreateWifiLock()
.
- Penguncian Wi-Fi performa tinggi yang baru
memungkinkan aplikasi menjaga
koneksi Wi-Fi berkinerja tinggi bahkan saat layar perangkat mati.
Aplikasi yang melakukan streaming musik, video, atau suara dalam waktu lama dapat memperoleh
kunci Wi-Fi berperforma tinggi untuk memastikan performa streaming bahkan saat layar
nonaktif. Karena menggunakan lebih banyak daya, aplikasi harus mendapatkan
Wi-Fi performa tinggi ketika diperlukan
aktivitas yang berjalan lama
koneksi jarak jauh.
- 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, pengiriman/penerimaan TCP {i>payload<i} dan untuk UID tertentu.
- Aplikasi kini dapat mengakses statistik tentang lebih banyak jenis penggunaan jaringan
menggunakan metode baru di
- Nama pengguna auth SIP
- Aplikasi kini bisa mendapatkan dan menetapkan nama pengguna autentikasi SIP untuk profil
menggunakan
metode baru
getAuthUserName()
dansetAuthUserName()
.
- Aplikasi kini bisa mendapatkan 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 pada
penyelesaian proyek. Untuk memulai jenis download ini, aplikasi akan meneruskan
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
dalam metodesetNotificationVisibility()
objek permintaan. - Metode baru,
addCompletedDownload()
, memungkinkan aplikasi menambahkan file ke {i>download<i}, sehingga dapat dikelola oleh aplikasi {i>Downloads<i}.
- Aplikasi kini dapat memulai download yang memberi tahu pengguna hanya pada
penyelesaian proyek. Untuk memulai jenis download ini, aplikasi akan meneruskan
- Tampilkan download yang diurutkan menurut ukuran
- Aplikasi dapat memulai aplikasi Download dalam mode sortir menurut ukuran dengan
menambahkan
INTENT_EXTRAS_SORT_BY_SIZE
ekstra baru ke intentACTION_VIEW_DOWNLOADS
.
- Aplikasi dapat memulai aplikasi Download dalam mode sortir menurut ukuran dengan
menambahkan
Framework IME
- Mendapatkan kunci nilai tambahan 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 menambahkan dukungan bawaan untuk konten mentah ADTS AAC, untuk audio streaming yang ditingkatkan, serta dukungan untuk audio FLAC, untuk kualitas tertinggi konten audio terkompresi (lossless). Lihat Format Media yang Didukung dokumen untuk informasi selengkapnya.
Luncurkan kontrol saat dihentikan berbagai aplikasi
Mulai dari Android 3.1, pengelola paket sistem melacak aplikasi yang berada dalam keadaan berhenti dan menyediakan sarana untuk mengontrol peluncurannya dari proses latar belakang dan aplikasi lain.
Perhatikan, status berhenti aplikasi tidak sama dengan status Aktivitas status dihentikan. Sistem mengelola kedua 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.
FLAG_INCLUDE_STOPPED_PACKAGES
— Sertakan filter intent dari aplikasi yang dihentikan dalam daftar target potensial untuk mengatasinya.FLAG_EXCLUDE_STOPPED_PACKAGES
— Mengecualikan filter intent aplikasi yang dihentikan dari daftar potensi target.
Jika tidak satu pun atau kedua flag ini didefinisikan dalam intent, default-nya perilakunya adalah menyertakan filter aplikasi yang dihentikan dalam daftar target potensial.
Perhatikan bahwa sistem menambahkan FLAG_EXCLUDE_STOPPED_PACKAGES
ke semua siaran
intent. Ini dilakukan untuk mencegah siaran dari layanan latar belakang dari
secara tidak sengaja atau tidak sengaja meluncurkan
komponen aplikasi yang dihentikan.
Layanan atau aplikasi latar belakang bisa mengganti perilaku ini dengan menambahkan atribut
FLAG_INCLUDE_STOPPED_PACKAGES
tanda untuk disiarkan
yang harus diizinkan untuk mengaktifkan aplikasi yang dihentikan.
Aplikasi dalam keadaan berhenti ketika pertama kali dipasang tetapi tidak belum diluncurkan dan dihentikan secara manual oleh pengguna (di bagian Kelola Aplikasi).
Notifikasi peluncuran dan upgrade pertama aplikasi
Platform ini menambahkan pemberitahuan yang ditingkatkan tentang peluncuran pertama aplikasi dan upgrade melalui dua tindakan intent baru:
ACTION_PACKAGE_FIRST_LAUNCH
— Dikirim ke paket penginstal aplikasi ketika aplikasi tersebut pertama kali diluncurkan (yaitu, saat pertama kali instance dipindahkan dari status berhenti). Data berisi nama paket.ACTION_MY_PACKAGE_REPLACED
— Memberi tahu aplikasi yang telah diperbarui, dengan versi baru yang diinstal melalui menggunakan versi yang sudah ada. Pesan ini hanya dikirim ke aplikasi yang telah diganti. Ini tidak berisi data tambahan. Untuk menerimanya, deklarasikan filter intent untuk tindakan ini. Anda bisa menggunakan intent ini untuk memicu kode yang membantu mendapatkan aplikasi kembali dalam kondisi berjalan dengan benar setelah upgrade.Intent ini dikirim langsung ke aplikasi, tetapi hanya jika aplikasi diupgrade saat dalam status dimulai (tidak dalam status berhenti).
Utilitas inti
- Cache LRU
- Class
LruCache
baru memungkinkan aplikasi Anda mendapatkan manfaat dari penyimpanan ke cache yang efisien. Aplikasi dapat menggunakan class untuk mengurangi waktu yang dihabiskan komputasi atau mengunduh data dari jaringan, dengan tetap mempertahankan jejak memori untuk data yang di-cache.LruCache
adalah cache yang memiliki referensi kuat dalam jumlah nilai yang terbatas. Setiap kali nilai diakses, maka akan dipindahkan ke kepala antrean. Ketika sebuah nilai ditambahkan ke cache, nilai di akhir antrean tersebut akan dihapus dan memenuhi syarat pembersihan sampah memori.
- Class
- Deskriptor file sebagai
int
- Anda kini bisa mendapatkan int deskriptor file native untuk
ParcelFileDescriptor
menggunakan salah satu metode baru,getFd()
ataudetachFd()
.
- Anda kini bisa mendapatkan int deskriptor file native untuk
WebKit
- Cookie skema file
CookieManager
kini mendukung cookie yang menggunakan tindakan Skema URIfile:
. Anda dapat menggunakansetAcceptFileSchemeCookies()
untuk mengaktifkan/menonaktifkan dukungan untuk cookie skema file, sebelum membangun instance dariWebView
atauCookieManager
. DiCookieManager
, Anda dapat memeriksa apakah cookie skema file diaktifkan dengan memanggilallowFileSchemeCookies()
.
- Notifikasi permintaan login
- Untuk mendukung fitur login otomatis browser yang diperkenalkan di Android 3.0,
baru
metode
onReceivedLoginRequest()
memberi tahu host aplikasi sehingga permintaan login otomatis untuk pengguna telah diproses.
- Untuk mendukung fitur login otomatis browser yang diperkenalkan di Android 3.0,
baru
metode
- Menghapus class dan antarmuka
- Beberapa class dan antarmuka dihapus dari API publik, setelah sebelumnya dalam status tidak digunakan lagi. Lihat API Laporan Perbedaan untuk mengetahui informasi selengkapnya.
Browser
Aplikasi Browser menambahkan fitur berikut untuk mendukung web aplikasi:
- Dukungan untuk pemutaran sisipan video yang disematkan di HTML5
Tag
<video>
. Jika memungkinkan, pemutaran dilakukan dengan akselerasi hardware. - Dukungan lapisan untuk elemen posisi tetap di semua situs (seluler dan {i>desktop<i}).
Konstanta fitur baru
Platform ini menambahkan konstanta fitur hardware baru yang dapat dideklarasikan developer
dalam manifes aplikasi, untuk memberi tahu entitas eksternal seperti Google
Pengenalan persyaratan aplikasi untuk kemampuan hardware baru yang didukung
dalam versi platform ini. Developer mendeklarasikan fitur ini dan 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 {i>host<i}.android.hardware.usb.host
— Aplikasi ini menggunakan USB API untuk berkomunikasi dengan perangkat keras eksternal yang terhubung melalui USB dan berfungsi 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 Google Play
Filter.
Laporan Perbedaan API
Untuk tampilan mendetail dari semua perubahan API di Android 3.1 (API Tingkat 12), lihat API Laporan Perbedaan.
API Level
Platform Android 3.1 menghadirkan versi terbaru API framework. Android 3.1 API diberi ID bilangan bulat — 12 — yang berarti 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.1 di aplikasi Anda,
Anda harus mengompilasi aplikasi terhadap library Android yang disediakan di
platform Android 3.1 SDK. Tergantung pada kebutuhan,
mungkin
juga perlu menambahkan android:minSdkVersion="12"
ke elemen <uses-sdk>
dalam elemen
manifes.
Untuk informasi selengkapnya, baca Apa yang dimaksud dengan API Tingkat?