API Android 3.1

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 lainnya. 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 lainnya. 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 yang baru bagi developer di Android 3.1, termasuk fitur dan perubahan baru dalam 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 dibangun ke dalam platform, termasuk dukungan untuk interaksi perangkat dan host USB. Dengan API, developer dapat membuat aplikasi yang dapat menemukan, berkomunikasi dengan, 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 yang didukung Android untuk berfungsi sebagai host. Misalnya, sebagian besar perangkat input, mouse, dan joystick adalah perangkat USB, seperti halnya kamera, hub, dan sebagainya.
  • Aksesori USB adalah hardware terhubung yang memiliki pengontrol host USB, 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 banyak lagi.

Untuk kedua jenis — perangkat USB dan aksesori USB — USB API platform mendukung penemuan melalui 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 bertindak sebagai host).
  • UsbAccessory, yang mewakili hardware eksternal yang terhubung sebagai host USB (dengan perangkat Android yang bertindak sebagai perangkat USB).
  • UsbInterface dan UsbEndpoint, yang menyediakan akses ke endpoint dan antarmuka USB standar untuk perangkat.
  • UsbDeviceConnection dan UsbRequest, 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 di-build ke dalam platform, dukungan sebenarnya untuk host USB dan mode aksesori terbuka pada perangkat tertentu ditentukan oleh produsennya. Secara khusus, mode host bergantung pada hardware pengontrol USB yang sesuai pada perangkat 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, jika perlu:

  • Jika aplikasi hanya terlihat 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 informasi lengkap 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 ini memudahkan aplikasi untuk menerima notifikasi saat perangkat dilampirkan 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 jenis ini, kemudian menggunakan metodenya untuk mendapatkan informasi tentang perangkat dan objek yang tersimpan di dalamnya, serta membuka koneksi dan mentransfer data. Beberapa metodenya mencakup:
    • getObjectHandles() menampilkan daftar nama sebutan channel untuk semua objek di perangkat yang cocok dengan format dan induk yang ditentukan. Untuk mendapatkan informasi tentang objek, aplikasi dapat meneruskan handle ke getObjectInfo().
    • importFile() memungkinkan aplikasi menyalin data untuk objek ke file di penyimpanan eksternal. Panggilan ini dapat memblokir selama waktu tertentu, bergantung pada ukuran data dan kecepatan perangkat, sehingga harus dibuat 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, sesuai dengan Set Data StorageInfo yang dijelaskan di 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 dalam bagian 5.1.1 spesifikasi MTP. Metode di class ini memungkinkan aplikasi mendapatkan produsen, model, nomor seri, dan versi perangkat.
  • MtpObjectInfo menyimpan informasi tentang objek yang disimpan di 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 pengaitan, 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 untuk memungkinkan pengguna 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 sumbu AXIS_HSCROLL dan AXIS_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 peristiwa HOVER_MOVE terakhir. Notifikasi pengarahan kursor masuk dan keluar belum didukung.

Untuk mendukung joystick dan gamepad, class InputDevice menyertakan sumber perangkat input baru berikut:

Untuk mendeskripsikan peristiwa gerakan dari sumber baru ini, serta peristiwa dari mouse dan trackball, platform 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 generik 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 aplikasi dalam batch, sehingga satu peristiwa dapat berisi posisi saat ini dan beberapa apa 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 menyediakan 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, aplikasi harus menafsirkan nilai sumbu sesuai dengan sumber tempatnya berasal. Saat menangani peristiwa gerakan, aplikasi harus menggunakan metode pada 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 dari sumber perangkat tertentu. Pada kedua kasus tersebut, informasi rentang untuk sumbu yang ditampilkan dalam objek InputDevice.MotionRange akan 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 "umum". Secara khusus, ini melaporkan peristiwa gerakan non-sentuh ke View melalui panggilan ke onGenericMotionEvent(), bukan ke onTouchEvent().

Platform ini mengirim peristiwa gerakan generik 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. Pengguna 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 di level 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) bawaannya, yang dapat digunakan aplikasi untuk mengelola streaming data interaktif atau on demand. Secara khusus, aplikasi yang menyediakan VOIP, push-to-talk, konferensi, dan streaming audio dapat menggunakan API untuk memulai sesi dan mengirimkan atau menerima aliran data melalui jaringan apa pun 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 dari RtpStream yang membawa payload audio melalui RTP.
  • AudioGroup, hub audio lokal untuk mengelola dan menggabungkan speaker, mikrofon, dan AudioStream perangkat.
  • AudioCodec, yang menyimpan kumpulan codec yang Anda tentukan untuk AudioStream.

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 serta AudioCodec yang dikonfigurasi.
  • AudioGroup mewakili endpoint lokal untuk satu atau beberapa AudioStream. AudioGroup menggabungkan semua AudioStream dan secara opsional berinteraksi dengan speaker perangkat dan mikrofon pada saat yang sama.

Penggunaan 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 mereka dapat diubah ukurannya — secara horizontal, vertikal, atau di kedua sumbu. Pengguna menyentuh lama widget untuk menampilkan tuas ubah ukurannya, lalu menarik handle horizontal dan/atau vertikal untuk mengubah ukuran pada petak tata letak.

Developer dapat membuat widget Layar utama dapat diubah ukurannya dengan menentukan atribut resizeMode di 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|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 objek View. Class ini mengotomatiskan dan mengoptimalkan animasi properti serta mempermudah pengelolaan beberapa animasi simultan pada objek View.

      Menggunakan ViewPropertyAnimator sangat mudah. Guna menganimasikan properti untuk View, panggil animate() guna membuat objek ViewPropertyAnimator untuk View tersebut. Gunakan metode di ViewPropertyAnimator untuk menentukan properti yang akan dianimasikan dan cara menganimasikannya. Misalnya, untuk memudarkan View menjadi transparan, panggil alpha(0);. Objek ViewPropertyAnimator menangani detail konfigurasi class Animator yang mendasarinya dan memulainya, lalu merender animasi.

  • Warna latar belakang animasi
    • Metode getBackgroundColor() dan setBackgroundColor(int) baru memungkinkan Anda mendapatkan/menyetel warna latar belakang di balik animasi, hanya untuk animasi jendela. Saat ini latar belakang harus hitam, dengan tingkat alfa yang diinginkan.
  • Mendapatkan animasi pecahan dari ViewAnimator
    • Metode getAnimatedFraction() baru memungkinkan Anda mendapatkan fraksi animasi saat ini — fraksi berlalu/terinterpolasi yang digunakan dalam update frame terbaru — dari ValueAnimator.

Framework UI

Grafis

  • Helper untuk mengelola bitmap
    • setHasAlpha(boolean) memungkinkan aplikasi menunjukkan bahwa semua piksel dalam Bitmap diketahui buram (salah) atau bahwa beberapa piksel mungkin berisi nilai alfa non-buram (benar). Perlu diperhatikan, untuk beberapa konfigurasi (seperti RGB_565), panggilan ini 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 non-buram.
    • getByteCount() mendapatkan ukuran Bitmap dalam byte.
    • getGenerationId() memungkinkan aplikasi mengetahui apakah Bitmap telah diubah, 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

Jaringan

  • Penguncian Wi-Fi berperforma tinggi
    • Penguncian Wi-Fi performa tinggi yang baru memungkinkan aplikasi mempertahankan koneksi Wi-Fi berperforma tinggi bahkan saat layar perangkat nonaktif. Aplikasi yang melakukan streaming musik, video, atau suara dalam waktu lama dapat memperoleh kunci Wi-Fi berperforma tinggi untuk memastikan performa streaming meskipun 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 ke createWifiLock().

  • 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, byte pengiriman/penerimaan/penerimaan payload TCP, dan segmen untuk UID tertentu.
  • Nama pengguna autentikasi SIP

Pengelola Download

framework IME

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.

Luncurkan kontrol pada aplikasi yang dihentikan

Mulai dari Android 3.1, pengelola paket sistem akan melacak aplikasi yang berada dalam status berhenti dan menyediakan cara untuk mengontrol peluncurannya dari proses latar belakang dan aplikasi lainnya.

Perhatikan bahwa status aplikasi dihentikan tidak sama dengan status berhenti Aktivitas. Sistem mengelola dua status berhenti tersebut secara terpisah.

Platform ini menentukan dua flag intent baru yang memungkinkan pengirim menentukan apakah Intent harus diizinkan untuk mengaktifkan komponen dalam aplikasi yang dihentikan.

Jika tidak satu 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 flag FLAG_INCLUDE_STOPPED_PACKAGES untuk menyiarkan intent yang akan 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 (di Kelola Aplikasi).

Notifikasi peluncuran dan upgrade aplikasi pertama kali

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, pertama kali aplikasi dipindahkan dari status berhenti). Data berisi nama paket.
  • ACTION_MY_PACKAGE_REPLACED — Memberi tahu aplikasi bahwa aplikasi telah diupdate, dengan versi baru telah diinstal pada versi yang sudah ada. Ini hanya dikirim ke aplikasi yang diganti. File ini tidak berisi data tambahan apa pun. Untuk menerimanya, deklarasikan filter intent untuk tindakan ini. Anda dapat menggunakan intent ini untuk memicu kode yang membantu mengembalikan aplikasi Anda ke kondisi berjalan yang benar setelah upgrade.

    Intent ini dikirim langsung ke aplikasi, tetapi hanya jika aplikasi di-upgrade saat aplikasi dalam status dimulai (bukan dalam status berhenti).

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 sebuah nilai ditambahkan ke cache lengkap, nilai pada akhir antrean tersebut akan dikeluarkan dan mungkin memenuhi syarat untuk pembersihan sampah memori.
  • Deskripsi file sebagai int

WebKit

  • Cookie skema file
    • CookieManager kini mendukung cookie yang menggunakan skema URI file:. Anda dapat menggunakan setAcceptFileSchemeCookies() untuk mengaktifkan/menonaktifkan dukungan untuk cookie skema file, sebelum membuat instance WebView atau CookieManager. Pada instance CookieManager, Anda dapat memeriksa apakah cookie skema file diaktifkan dengan memanggil allowFileSchemeCookies().
  • 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.
  • 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 menginformasikan entity eksternal seperti Google Play tentang persyaratan aplikasi untuk kemampuan hardware baru yang didukung dalam versi platform ini. Developer mendeklarasikan konstanta fitur ini dan 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 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 telah diupdate. Android 3.1 API diberikan 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, sebelum menginstal aplikasi.

Untuk menggunakan API yang diperkenalkan di Android 3.1 di aplikasi, Anda perlu mengompilasi aplikasi tersebut ke library Android yang disediakan dalam platform SDK Android 3.1. Bergantung pada kebutuhan, Anda mungkin juga perlu menambahkan atribut android:minSdkVersion="12" ke elemen <uses-sdk> dalam manifes aplikasi.

Untuk informasi selengkapnya, baca Apa itu API Level?