API Android 5.0

Level API: 21

Android 5.0 (LOLLIPOP) menawarkan berbagai fitur baru untuk pengguna dan developer aplikasi. Dokumen ini menyediakan pengantar untuk API baru yang paling penting.

Jika Anda memiliki aplikasi yang dipublikasikan, pastikan untuk melihat Perubahan Perilaku Android 5.0 yang harus diperhitungkan di aplikasi Anda. Perubahan perilaku ini dapat memengaruhi aplikasi Anda di perangkat Android 5.0, meskipun Anda tidak menggunakan API baru atau menargetkan fungsi baru.

Untuk mendapatkan gambaran tingkat tinggi tentang fitur platform baru, lihat Fitur unggulan Android Lollipop.

Mulai mengembangkan

Untuk mulai mem-build aplikasi bagi Android 5.0, Anda harus mendapatkan Android SDK terlebih dahulu. Lalu, gunakan SDK Manager untuk mendownload Android 5.0 SDK Platform dan System Image.

Memperbarui target API level Anda

Untuk lebih mengoptimalkan aplikasi Anda pada perangkat yang menjalankan Android 5.0, tetapkan targetSdkVersion ke "21", instal aplikasi di image sistem Android 5.0, uji, lalu publikasikan aplikasi yang telah diupdate dengan perubahan ini.

Anda dapat menggunakan API Android 5.0 sekaligus mendukung versi lama dengan menambahkan kondisi ke kode yang memeriksa API level sistem sebelum mengeksekusi API yang tidak didukung oleh minSdkVersion Anda. Untuk mempelajari lebih lanjut cara mempertahankan kompatibilitas mundur, baca Mendukung Versi Platform Berbeda.

Untuk informasi selengkapnya tentang cara kerja API level, baca Apa yang dimaksud dengan API Level?

Perubahan perilaku yang penting

Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda mungkin akan dipengaruhi oleh perubahan dalam Android 5.0.

Lihat Perubahan Android 5.0 untuk informasi selengkapnya.

Antarmuka Pengguna

Dukungan desain material

Android 5.0 menambahkan dukungan untuk gaya desain material baru Android. Anda dapat membuat aplikasi dengan desain material yang secara visual dinamis dan memiliki transisi elemen UI yang terasa alami bagi pengguna. Dukungan ini menyertakan:

  • Tema material
  • Bayangan tampilan
  • Widget RecyclerView
  • Animasi sumber daya dapat digambar dan efek penataan gaya
  • Animasi desain material dan efek transisi aktivitas
  • Animator untuk properti tampilan berdasarkan status tampilan
  • Widget UI yang bisa disesuaikan dan bilah aplikasi dengan palet warna yang Anda kontrol
  • Sumber daya dapat digambar yang animasi dan non-animasi berdasarkan grafis vektor XML

Untuk mempelajari lebih lanjut cara menambahkan fungsi desain material ke aplikasi Anda, lihat Desain Material.

Beberapa dokumen dan aktivitas sekaligus di layar terbaru

Di rilis sebelumnya, layar terbaru hanya dapat menampilkan satu tugas untuk setiap aplikasi yang terakhir berinteraksi dengan pengguna. Sekarang aplikasi Anda dapat membuka lebih banyak tugas sesuai kebutuhan untuk beberapa aktivitas serentak tambahan bagi dokumen. Fitur ini memfasilitasi multitasking dengan memungkinkan pengguna dengan cepat beralih di antara setiap aktivitas dan dokumen dari layar terbaru, dengan pengalaman beralih yang konsisten di semua aplikasi. Contoh tugas serentak tersebut antara lain membuka beberapa tab di aplikasi browser web, beberapa dokumen di aplikasi produktivitas, beberapa pertandingan sekaligus dalam game, atau chat di aplikasi perpesanan. Aplikasi Anda dapat mengelola tugasnya melalui class ActivityManager.AppTask.

Untuk menyisipkan jeda logis sehingga sistem memperlakukan aktivitas Anda sebagai tugas baru, gunakan FLAG_ACTIVITY_NEW_DOCUMENT saat meluncurkan aktivitas dengan startActivity(). Anda juga bisa mendapatkan perilaku ini dengan menyetel atribut documentLaunchMode elemen <activity> ke "intoExisting" atau "always" dalam manifes Anda.

Agar layar terbaru tampak berantakan, Anda dapat menetapkan jumlah tugas maksimum dari aplikasi yang dapat muncul di layar tersebut. Untuk melakukannya, setel atribut <application> android:maxRecents. Jumlah maksimum saat ini yang dapat ditentukan adalah 50 tugas per pengguna (25 untuk perangkat dengan RAM rendah).

Tugas di layar terbaru bisa disetel agar tetap bertahan setelah boot ulang. Untuk mengontrol perilaku persistensi, gunakan atribut android:persistableMode. Anda juga dapat mengubah properti visual aktivitas di layar terbaru, seperti warna, label, dan ikon aktivitas, dengan memanggil metode setTaskDescription().

Pembaruan WebView

Android 5.0 memperbarui implementasi WebView ke Chromium M37, dengan menghadirkan peningkatan keamanan dan stabilitas, serta perbaikan bug. String agen pengguna default untuk WebView yang berjalan di Android 5.0 telah diperbarui untuk menyertakan 37.0.0.0 sebagai nomor versi.

Rilis ini memperkenalkan class PermissionRequest, yang memungkinkan aplikasi Anda memberikan izin WebView untuk mengakses resource yang dilindungi seperti kamera dan mikrofon, melalui API web seperti getUserMedia(). Aplikasi Anda harus memiliki izin Android yang sesuai untuk resource ini agar dapat memberikan izin ke WebView.

Dengan metode onShowFileChooser() baru, Anda kini dapat menggunakan kolom formulir input di WebView, dan meluncurkan pemilih file untuk memilih gambar dan file dari perangkat Android.

Selain itu, rilis ini menghadirkan dukungan untuk standar terbuka WebAudio, WebGL, dan WebRTC. Untuk mempelajari lebih lanjut fitur baru yang disertakan dalam rilis ini, lihat WebView untuk Android.

Merekam dan berbagi layar

Android 5.0 memungkinkan Anda menambahkan kemampuan merekam dan berbagi layar ke aplikasi dengan android.media.projection API yang baru. Fungsi ini berguna, misalnya, jika Anda ingin mengaktifkan berbagi layar di aplikasi konferensi video.

Metode createVirtualDisplay() baru memungkinkan aplikasi Anda merekam konten layar utama (tampilan default) ke dalam objek Surface, yang kemudian dapat dikirim oleh aplikasi Anda ke seluruh jaringan. API ini hanya mengizinkan perekaman konten layar yang tidak aman, bukan audio sistem. Untuk memulai perekaman layar, aplikasi Anda harus terlebih dahulu meminta izin pengguna dengan meluncurkan dialog perekaman layar menggunakan Intent yang diperoleh melalui metode createScreenCaptureIntent().

Untuk contoh cara menggunakan API baru, lihat class MediaProjectionDemo dalam project contoh.

Notifikasi

Notifikasi layar kunci

Layar kunci di Android 5.0 memiliki kemampuan untuk menampilkan notifikasi. Pengguna dapat memilih melalui Settings apakah akan mengizinkan konten notifikasi sensitif ditampilkan di layar kunci yang aman.

Aplikasi Anda dapat mengontrol tingkat detail yang terlihat saat notifikasinya ditampilkan di layar kunci yang aman. Untuk mengontrol tingkat visibilitas, panggil setVisibility() dan tentukan salah satu nilai berikut:

Jika tingkat visibilitas adalah VISIBILITY_PRIVATE, Anda juga dapat memberikan versi konten notifikasi yang telah diedit dan menyembunyikan detail pribadi. Misalnya, aplikasi SMS mungkin menampilkan notifikasi yang menunjukkan "Anda memiliki 3 pesan teks baru", tetapi menyembunyikan isi dan pengirim pesan. Untuk memberikan notifikasi alternatif ini, buat notifikasi pengganti terlebih dahulu menggunakan Notification.Builder. Saat membuat objek notifikasi pribadi, lampirkan notifikasi pengganti ke objek tersebut melalui metode setPublicVersion().

Metadata notifikasi

Android 5.0 menggunakan metadata yang terkait dengan notifikasi aplikasi untuk mengurutkan notifikasi dengan lebih cerdas. Untuk menetapkan metadata, panggil metode berikut di Notification.Builder saat Anda membuat notifikasi:

  • setCategory(): Memberi tahu sistem cara menangani notifikasi aplikasi Anda saat perangkat dalam mode prioritas (misalnya, jika notifikasi mewakili panggilan masuk, pesan instan, atau alarm).
  • setPriority(): Menandai notifikasi sebagai lebih atau kurang penting daripada notifikasi biasanya. Notifikasi dengan kolom prioritas yang disetel ke PRIORITY_MAX atau PRIORITY_HIGH akan muncul di jendela mengambang kecil jika notifikasi juga memiliki suara atau getaran.
  • addPerson(): Memungkinkan Anda menambahkan satu atau beberapa orang yang relevan ke notifikasi. Aplikasi Anda dapat menggunakannya untuk memberi tahu sistem bahwa sistem harus mengelompokkan notifikasi dari orang yang ditentukan, atau memberi peringkat lebih penting pada notifikasi dari orang-orang ini.

Grafik

Dukungan untuk OpenGL ES 3.1

Android 5.0 menambahkan antarmuka Java dan dukungan native untuk OpenGL ES 3.1. Fungsionalitas baru yang utama pada OpenGL ES 3.1 menyertakan:

  • Compute Shader
  • Objek shader terpisah
  • Perintah menggambar tidak langsung
  • Tekstur stensil dan multisampel
  • Peningkatan bahasa shading
  • Ekstensi untuk mode blend tingkat lanjut dan debugging
  • Kompatibilitas mundur dengan versi OpenGL ES 2.0 dan 3.0

Antarmuka Java untuk OpenGL ES 3.1 di Android dilengkapi dengan GLES31. Saat menggunakan OpenGL ES 3.1, pastikan Anda mendeklarasikannya dalam file manifes dengan tag <uses-feature> dan atribut android:glEsVersion. Contoh:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

Untuk informasi penggunaan OpenGL ES lebih lanjut, termasuk cara memeriksa versi OpenGL ES yang didukung perangkat saat runtime, lihat Panduan OpenGL ES API.

Android Extension Pack

Selain OpenGL ES 3.1, rilis ini menyediakan paket ekstensi dengan antarmuka Java dan dukungan native untuk fungsi grafis tingkat lanjut. Ekstensi ini dianggap sebagai satu paket oleh Android. (Jika ekstensi ANDROID_extension_pack_es31a ada, aplikasi Anda dapat menganggap semua ekstensi dalam paket itu ada dan mengaktifkan fitur bahasa shading dengan satu pernyataan #extension.)

Dukungan paket ekstensi:

  • Dukungan shader fragmen yang terjamin untuk buffer penyimpanan shader, gambar, dan atom (Dukungan shader fragmen bersifat opsional di OpenGL ES 3.1.)
  • Tessellation-shader dan geometry-shader
  • Format kompresi tekstur ASTC (LDR)
  • Interpolasi dan shading per-sampel
  • Mode blend berbeda untuk setiap penyertaan warna dalam frame-buffer

Antarmuka Java untuk paket ekstensi disediakan dengan GLES31Ext. Dalam manifes aplikasi, Anda dapat mendeklarasikan bahwa aplikasi hanya boleh diinstal di perangkat yang mendukung paket ekstensi. Contoh:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

Media

Camera API untuk kemampuan kamera canggih

Android 5.0 memperkenalkan API android.hardware.camera2 baru untuk memfasilitasi pengambilan foto yang halus dan pemrosesan gambar. Kini Anda dapat mengakses perangkat kamera yang tersedia untuk sistem secara terprogram dengan getCameraIdList() dan terhubung ke perangkat tertentu dengan openCamera(). Untuk mulai mengambil gambar, buat CameraCaptureSession dan tentukan objek Surface untuk mengirim gambar yang diambil. CameraCaptureSession dapat dikonfigurasi untuk mengambil satu bidikan atau beberapa gambar sekaligus.

Agar diberi tahu saat gambar baru diambil, implementasikan pemroses CameraCaptureSession.CaptureCallback dan tetapkan dalam permintaan pengambilan gambar. Sekarang, saat sistem menyelesaikan permintaan pengambilan gambar, pemroses CameraCaptureSession.CaptureCallback akan menerima panggilan ke onCaptureCompleted(), yang memberi Anda metadata pengambilan gambar dalam CaptureResult.

Class CameraCharacteristics memungkinkan aplikasi Anda mendeteksi fitur kamera yang tersedia di perangkat. Properti INFO_SUPPORTED_HARDWARE_LEVEL objek mewakili tingkat fungsionalitas kamera.

  • Semua perangkat setidaknya mendukung level hardware INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY, yang memiliki kemampuan kurang lebih sama dengan API Camera yang tidak digunakan lagi.
  • Perangkat yang mendukung level hardware INFO_SUPPORTED_HARDWARE_LEVEL_FULL mampu melakukan kontrol manual pengambilan gambar dan pascapemrosesan, serta mengambil gambar resolusi tinggi pada kecepatan frame yang tinggi.

Untuk melihat cara menggunakan Camera API yang diperbarui, lihat contoh implementasi Camera2Basic dan Camera2Video dalam rilis ini.

Pemutaran audio

Rilis ini menyertakan perubahan berikut pada AudioTrack:

  • Aplikasi Anda kini dapat menyediakan data audio dalam format floating point (ENCODING_PCM_FLOAT). Hal ini memungkinkan rentang dinamis yang lebih besar, presisi yang lebih konsisten, dan headroom yang lebih besar. Aritmetika titik-mengambang terutama sangat berguna selama perhitungan antara. Endpoint pemutaran menggunakan format integer untuk data audio, dan dengan kedalaman bit yang lebih rendah. (Di Android 5.0, sebagian pipeline internal belum menjadi floating point.)
  • Aplikasi Anda kini dapat menyediakan data audio sebagai ByteBuffer, dalam format yang sama dengan yang diberikan oleh MediaCodec.
  • Opsi WRITE_NON_BLOCKING dapat menyederhanakan buffering dan multithreading untuk beberapa aplikasi.

Kontrol pemutaran media

Gunakan notifikasi dan API media baru untuk memastikan bahwa UI sistem mengetahui tentang pemutaran media Anda dan dapat mengekstrak serta menampilkan gambar album. Mengontrol pemutaran media di seluruh UI dan layanan kini lebih mudah dengan class MediaSession dan MediaController yang baru.

Class MediaSession baru menggantikan class RemoteControlClient yang tidak digunakan lagi dan menyediakan sekumpulan metode callback untuk menangani kontrol transport dan tombol media. Jika aplikasi Anda menyediakan pemutaran media dan berjalan di platform TV atau Wear Android, gunakan class MediaSession untuk menangani kontrol transpor menggunakan metode callback yang sama.

Kini Anda dapat membuat aplikasi pengontrol media sendiri dengan class MediaController yang baru. Class ini menyediakan cara yang aman untuk thread untuk memantau dan mengontrol pemutaran media dari proses UI aplikasi Anda. Saat membuat pengontrol, tentukan objek MediaSession.Token agar aplikasi Anda dapat berinteraksi dengan MediaSession yang diberikan. Dengan menggunakan metode MediaController.TransportControls, Anda dapat mengirimkan perintah seperti play(), stop(), skipToNext(), dan setRating() untuk mengontrol pemutaran media pada sesi tersebut. Dengan pengontrol, Anda juga dapat mendaftarkan objek MediaController.Callback untuk memproses metadata dan perubahan status pada sesi.

Selain itu, Anda dapat membuat notifikasi lengkap yang memungkinkan kontrol pemutaran diikat ke sesi media dengan class Notification.MediaStyle yang baru.

Penjelajahan media

Android 5.0 memperkenalkan kemampuan bagi aplikasi untuk menjelajahi library konten media aplikasi lain, melalui API android.media.browse yang baru. Untuk menampilkan konten media di aplikasi Anda, perluas class MediaBrowserService. Implementasi MediaBrowserService Anda harus menyediakan akses ke MediaSession.Token agar aplikasi dapat memutar konten media yang disediakan melalui layanan Anda.

Untuk berinteraksi dengan layanan browser media, gunakan class MediaBrowser. Tentukan nama komponen untuk MediaSession saat Anda membuat instance MediaBrowser. Dengan menggunakan instance browser tersebut, aplikasi Anda kemudian dapat terhubung ke layanan terkait dan mendapatkan objek MediaSession.Token untuk memutar konten yang diekspos melalui layanan tersebut.

Penyimpanan

Pilihan direktori

Android 5.0 memperluas Storage Access Framework agar pengguna dapat memilih seluruh subtree direktori sehingga aplikasi memiliki akses baca/tulis ke semua dokumen yang ada di dalamnya tanpa memerlukan konfirmasi pengguna untuk setiap item.

Untuk memilih subhierarki direktori, buat dan kirim intent OPEN_DOCUMENT_TREE. Sistem menampilkan semua instance DocumentsProvider yang mendukung pemilihan subhierarki, sehingga memungkinkan pengguna menjelajahi dan memilih direktori. URI yang ditampilkan mewakili akses ke subpohon yang dipilih. Kemudian, Anda dapat menggunakan buildChildDocumentsUriUsingTree() dan buildDocumentUriUsingTree() bersama dengan query() untuk menjelajahi subpohon.

Metode createDocument() baru memungkinkan Anda membuat dokumen atau direktori baru di mana saja di bawah subpohon. Untuk mengelola dokumen yang sudah ada, gunakan renameDocument() dan deleteDocument(). Periksa COLUMN_FLAGS untuk memverifikasi dukungan penyedia bagi panggilan ini sebelum mengeluarkannya.

Jika Anda mengimplementasikan DocumentsProvider dan ingin mendukung pemilihan subpohon, implementasikan isChildDocument() dan sertakan FLAG_SUPPORTS_IS_CHILD dalam COLUMN_FLAGS Anda.

Android 5.0 juga memperkenalkan direktori khusus paket baru di penyimpanan bersama tempat aplikasi Anda dapat menempatkan file media untuk disertakan dalam MediaStore. getExternalMediaDirs() baru menampilkan jalur ke direktori ini di semua perangkat penyimpanan bersama. Serupa dengan getExternalFilesDir(), tidak ada izin tambahan yang diperlukan oleh aplikasi Anda untuk mengakses jalur yang ditampilkan. Platform secara berkala memindai media baru dalam direktori ini, tetapi Anda juga dapat menggunakan MediaScannerConnection untuk memindai konten baru secara eksplisit.

Nirkabel &Konektivitas

Beberapa koneksi jaringan sekaligus

Android 5.0 menyediakan beberapa API multijaringan baru yang memungkinkan aplikasi Anda secara dinamis memindai jaringan yang tersedia dengan kemampuan khusus, dan menghubungkan ke sana. Fungsi ini berguna saat aplikasi Anda memerlukan jaringan khusus, seperti SUPL, MMS, atau jaringan-potong-pulsa, atau jika Anda ingin mengirim data menggunakan jenis protokol transpor tertentu.

Untuk memilih dan menghubungkan ke jaringan secara dinamis dari aplikasi Anda, ikuti langkah-langkah berikut:

  1. Buat ConnectivityManager.
  2. Gunakan class NetworkRequest.Builder untuk membuat objek NetworkRequest dan menentukan fitur jaringan dan jenis transpor yang diminati aplikasi Anda.
  3. Untuk memindai jaringan yang cocok, panggil requestNetwork() atau registerNetworkCallback(), dan teruskan objek NetworkRequest dan implementasi ConnectivityManager.NetworkCallback. Gunakan metode requestNetwork() jika Anda ingin secara aktif beralih ke jaringan yang cocok setelah terdeteksi; untuk menerima notifikasi saja mengenai jaringan yang dipindai tanpa beralih ke jaringan itu secara aktif, gunakan metode registerNetworkCallback() sebagai gantinya.

Saat mendeteksi jaringan yang cocok, sistem akan terhubung ke jaringan dan memanggil callback onAvailable(). Anda dapat menggunakan objek Network dari callback untuk mendapatkan informasi tambahan tentang jaringan, atau untuk mengarahkan traffic agar menggunakan jaringan yang dipilih.

Bluetooth Hemat Energi

Android 4.3 memperkenalkan dukungan platform untuk Bluetooth Hemat Energi (Bluetooth LE) dalam peran sentral. Di Android 5.0, perangkat Android kini dapat berfungsi sebagai perangkat periferal Bluetooth LE. Aplikasi dapat menggunakan kemampuan ini untuk membuat keberadaannya diketahui oleh perangkat di sekitar. Misalnya, Anda dapat membuat aplikasi yang memungkinkan perangkat berfungsi sebagai pedometer atau monitor kesehatan dan mengomunikasikan datanya dengan perangkat Bluetooth LE lainnya.

android.bluetooth.le API baru memungkinkan aplikasi Anda menyiarkan iklan, memindai respons, dan membentuk koneksi dengan perangkat Bluetooth LE di sekitar. Untuk menggunakan fitur iklan dan pemindaian baru, tambahkan izin BLUETOOTH_ADMIN dalam manifes Anda. Saat pengguna mengupdate atau mendownload aplikasi Anda dari Play Store, mereka akan diminta untuk memberikan izin berikut ke aplikasi Anda: "Informasi koneksi Bluetooth: Mengizinkan aplikasi untuk mengontrol Bluetooth, termasuk menyiarkan ke atau mendapatkan informasi tentang perangkat Bluetooth di sekitar".

Untuk memulai iklan Bluetooth LE agar perangkat lain dapat menemukan aplikasi Anda, panggil startAdvertising() dan teruskan implementasi class AdvertiseCallback. Objek callback akan menerima laporan berhasil atau gagal atas pengoperasian iklan.

Android 5.0 memperkenalkan class ScanFilter sehingga aplikasi Anda hanya dapat memindai jenis perangkat tertentu yang diinginkan. Untuk memulai pemindaian perangkat LE Bluetooth, panggil startScan() dan teruskan daftar filter. Dalam panggilan metode, Anda juga harus menyediakan implementasi ScanCallback untuk melaporkan saat iklan Bluetooth LE ditemukan.

Penyempurnaan NFC

Android 5.0 menambahkan peningkatan ini untuk memungkinkan penggunaan NFC yang lebih luas dan lebih fleksibel:

  • Android Beam kini tersedia di menu bagikan.
  • Aplikasi Anda dapat memanggil Android Beam di perangkat pengguna untuk berbagi data dengan memanggil invokeBeam(). Dengan demikian, pengguna tidak perlu mengetuk perangkat secara manual dengan perangkat lain yang mendukung NFC untuk menyelesaikan transfer data.
  • Anda dapat menggunakan metode createTextRecord() baru untuk membuat data NDEF yang berisi data teks UTF-8.
  • Jika mengembangkan aplikasi pembayaran, Anda kini dapat mendaftarkan ID aplikasi NFC (AID) secara dinamis dengan memanggil registerAidsForService(). Anda juga dapat menggunakan setPreferredService() untuk menetapkan layanan emulasi kartu pilihan yang harus digunakan saat aktivitas tertentu berada di latar depan.

Proyek Volta

Selain fitur baru, Android 5.0 menekankan peningkatan dalam daya tahan baterai. Gunakan alat dan API baru untuk memahami dan mengoptimalkan konsumsi daya aplikasi Anda.

Menjadwalkan tugas

Android 5.0 menyediakan API JobScheduler baru yang memungkinkan Anda mengoptimalkan masa pakai baterai dengan menentukan tugas untuk dijalankan sistem secara asinkron nanti atau dalam kondisi yang ditentukan (misalnya saat perangkat sedang diisi dayanya). Penjadwalan tugas berguna dalam situasi seperti:

  • Aplikasi memiliki pekerjaan yang sedang-tidak-dihadapi-pengguna yang bisa Anda tangguhkan.
  • Aplikasi memiliki pekerjaan yang ingin Anda lakukan bila unit telah terhubung ke listrik.
  • Aplikasi memiliki tugas yang memerlukan akses jaringan atau koneksi Wi-Fi.
  • Aplikasi memiliki sejumlah tugas yang ingin Anda jalankan sebagai batch dengan jadwal rutin.

Unit kerja dienkapsulasi oleh objek JobInfo. Objek ini menetapkan kriteria penjadwalan.

Gunakan class JobInfo.Builder untuk mengonfigurasi cara menjalankan tugas yang dijadwalkan. Anda dapat menjadwalkan tugas untuk dijalankan dalam kondisi tertentu, seperti:

  • Dimulai saat perangkat sedang mengisi daya
  • Dimulai saat perangkat terhubung ke jaringan yang berbiaya tetap
  • Dimulai saat perangkat sedang tidak digunakan
  • Diselesaikan sebelum batas waktu tertentu atau dengan penundaan minimum

Misalnya, Anda dapat menambahkan kode seperti ini untuk menjalankan tugas di jaringan tidak berbayar:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

Jika perangkat memiliki daya stabil (yaitu, terhubung ke listrik selama lebih dari 2 menit dan baterai berada pada kondisi sehat), sistem akan menjalankan tugas terjadwal yang siap dijalankan, meskipun batas waktu tugas belum berakhir.

Untuk melihat contoh cara menggunakan JobScheduler API, lihat contoh implementasi JobSchedulerSample dalam rilis ini.

Alat bantu developer untuk penggunaan baterai

Perintah dumpsys batterystats baru menghasilkan data statistik yang menarik tentang penggunaan baterai pada perangkat, yang diatur menurut ID pengguna unik (UID). Statistik tersebut berisi:

  • Riwayat kejadian yang terkait dengan baterai
  • Statistik global untuk perangkat
  • Perkiraan penggunaan daya per UID dan komponen sistem
  • Per aplikasi seluler ms per paket
  • Statistik agregat UID sistem
  • Statistik agregat UID aplikasi

Gunakan opsi --help untuk mempelajari berbagai opsi untuk menyesuaikan output. Misalnya, untuk mencetak statistik penggunaan baterai untuk paket aplikasi tertentu sejak perangkat terakhir diisi daya, jalankan perintah ini:

$ adb shell dumpsys batterystats --charged <package-name>

Anda dapat menggunakan alat Battery Historian pada output perintah dumpsys untuk menghasilkan visualisasi HTML untuk peristiwa terkait daya dari log. Informasi ini memudahkan Anda memahami dan mendiagnosis masalah terkait baterai.

Android di Tempat Kerja dan Pendidikan

Penyediaan terkelola

Android 5.0 menyediakan fungsi baru untuk menjalankan aplikasi dalam lingkungan perusahaan. Administrator perangkat dapat memulai proses penyediaan terkelola untuk menambahkan profil terkelola bersama tetapi terpisah ke perangkat, jika pengguna sudah memiliki akun pribadi. Aplikasi yang terkait dengan profil terkelola akan muncul bersama aplikasi non-terkelola di Peluncur, layar terbaru, dan notifikasi pengguna.

Untuk memulai proses penyediaan terkelola, kirim ACTION_PROVISION_MANAGED_PROFILE dalam Intent. Jika panggilan berhasil, sistem akan memicu callback onProfileProvisioningComplete(). Selanjutnya, Anda dapat memanggil setProfileEnabled() untuk mengaktifkan profil terkelola ini.

Secara default, hanya subset kecil dari aplikasi yang diaktifkan dalam profil terkelola. Anda dapat menginstal aplikasi tambahan dalam profil terkelola dengan memanggil enableSystemApp().

Jika sedang mengembangkan aplikasi Peluncur, Anda dapat menggunakan class LauncherApps baru untuk mendapatkan daftar aktivitas yang dapat diluncurkan bagi pengguna saat ini dan profil terkelola terkait. Peluncur dapat membuat aplikasi terkelola menonjol secara visual dengan menambahkan badge kerja ke drawable ikon. Untuk mengambil ikon badge, panggil getUserBadgedIcon().

Untuk melihat cara menggunakan fungsi baru tersebut, lihat contoh implementasi BasicManagedProfile dalam rilis ini.

Pemilik perangkat

Android 5.0 memperkenalkan kemampuan untuk men-deploy aplikasi pemilik perangkat. Pemilik perangkat adalah jenis khusus administrator perangkat yang memiliki kemampuan tambahan untuk membuat dan menghapus pengguna sekunder serta mengonfigurasi setelan global di perangkat. Aplikasi pemilik perangkat Anda dapat menggunakan berbagai metode di class DevicePolicyManager untuk mengontrol secara mendetail konfigurasi, keamanan, dan aplikasi pada perangkat terkelola. Sebuah perangkat hanya bisa memiliki satu pemilik perangkat aktif untuk setiap kalinya.

Untuk men-deploy dan mengaktifkan pemilik perangkat, Anda harus melakukan transfer data NFC dari aplikasi pemrograman ke perangkat saat perangkat dalam status belum ditetapkan. Transfer data ini mengirimkan informasi yang sama dengan intent penyediaan yang dijelaskan dalam Penyediaan terkelola.

Pin ke layar

Android 5.0 memperkenalkan API pin ke layar yang baru yang memungkinkan Anda untuk sementara melarang pengguna meninggalkan tugas atau diganggu oleh notifikasi. Ini bisa digunakan, misalnya, jika Anda sedang mengembangkan aplikasi pendidikan untuk mendukung persyaratan penilaian dengan risiko tinggi pada Android, atau aplikasi yang memiliki kegunaan tunggal atau aplikasi kios. Setelah aplikasi Anda mengaktifkan pin ke layar, pengguna tidak dapat melihat notifikasi, mengakses aplikasi lain, atau kembali ke layar utama, hingga aplikasi Anda keluar dari mode tersebut.

Ada dua cara untuk mengaktifkan pin ke layar:

  • Secara manual: Pengguna dapat mengaktifkan penyematan layar di Setelan > Keamanan > Penyematan Layar, lalu memilih tugas yang ingin disematkan dengan menyentuh ikon pin hijau di layar terbaru.
  • Secara terprogram: Untuk mengaktifkan penyematan layar secara terprogram, panggil startLockTask() dari aplikasi Anda. Jika aplikasi yang meminta bukan pemilik perangkat, pengguna akan diminta untuk mengonfirmasi. Aplikasi pemilik perangkat dapat memanggil metode setLockTaskPackages() untuk mengaktifkan aplikasi agar dapat disematkan tanpa langkah konfirmasi pengguna.

Saat penguncian tugas aktif, perilaku berikut akan terjadi:

  • Status bar kosong, dan notifikasi pengguna serta informasi status disembunyikan.
  • Tombol Beranda dan Aplikasi Terbaru disembunyikan.
  • Aplikasi lainnya tidak bisa membuka aktivitas baru.
  • Aplikasi saat ini dapat memulai aktivitas baru, selama aktivitas tersebut tidak membuat tugas baru.
  • Saat penyematan layar dipanggil oleh pemilik perangkat, pengguna tetap terkunci ke aplikasi Anda hingga aplikasi memanggil stopLockTask().
  • Jika penyematan layar diaktifkan oleh aplikasi lain yang bukan pemilik perangkat atau pengguna secara langsung, pengguna dapat keluar dengan menahan tombol Kembali dan Terbaru.

Kerangka Kerja Pencetakan

Me-render PDF sebagai bitmap

Kini Anda dapat merender halaman dokumen PDF menjadi gambar bitmap untuk dicetak menggunakan class PdfRenderer baru. Anda harus menentukan ParcelFileDescriptor yang dapat dicari (yaitu, konten dapat diakses secara acak) tempat sistem menulis konten yang dapat dicetak. Aplikasi Anda dapat memperoleh halaman untuk dirender dengan openPage(), lalu memanggil render() untuk mengubah PdfRenderer.Page yang telah dibuka menjadi bitmap. Anda juga dapat menetapkan parameter tambahan jika hanya ingin mengonversi sebagian dokumen menjadi gambar bitmap (misalnya, untuk menerapkan rendering berpetak untuk memperbesar dokumen).

Untuk contoh cara menggunakan API baru, lihat contoh PdfRendererBasic.

Sistem

Statistik penggunaan aplikasi

Anda kini dapat mengakses histori penggunaan aplikasi di perangkat Android dengan android.app.usage API yang baru. API ini memberikan informasi penggunaan yang lebih detail daripada metode getRecentTasks() yang tidak digunakan lagi. Untuk menggunakan API ini, Anda harus mendeklarasikan izin "android.permission.PACKAGE_USAGE_STATS" terlebih dahulu dalam manifes. Pengguna juga harus mengaktifkan akses untuk aplikasi ini melalui Setelan > Keamanan > Aplikasi dengan akses penggunaan.

Sistem akan mengumpulkan data penggunaan berdasarkan per aplikasi, menggabungkan data pada interval harian, mingguan, bulanan, dan tahunan. Durasi maksimum sistem menyimpan data ini adalah sebagai berikut:

  • Data harian: 7 hari
  • Data mingguan: 4 minggu
  • Data bulanan: 6 bulan
  • Data tahunan: 2 tahun

Untuk setiap aplikasi, sistem akan mencatat data berikut:

  • Waktu terakhir penggunaan aplikasi
  • Total durasi aplikasi berada di latar depan selama interval waktu tersebut (menurut hari, minggu, bulan, atau tahun)
  • Perekaman stempel waktu saat komponen (yang diidentifikasi melalui paket dan nama aktivitas) dipindahkan ke latar depan atau latar belakang selama hari itu
  • Perekaman stempel waktu saat konfigurasi perangkat berubah (misalnya saat orientasi perangkat berubah karena rotasi)

Pengujian & Aksesibilitas

Peningkatan pengujian dan aksesibilitas

Android 5.0 menambahkan dukungan berikut untuk pengujian dan aksesibilitas:

  • Metode getWindowAnimationFrameStats() dan getWindowContentFrameStats() yang baru merekam statistik frame untuk animasi dan konten jendela. Metode ini memungkinkan Anda menulis pengujian instrumentasi untuk mengevaluasi apakah aplikasi merender bingkai pada frekuensi refresh yang cukup untuk memberikan pengalaman pengguna yang mulus.
  • Metode executeShellCommand() baru memungkinkan Anda mengeksekusi perintah shell dari uji instrumentasi. Eksekusi perintah ini serupa dengan menjalankan adb shell dari host yang terhubung ke perangkat, sehingga memungkinkan Anda menggunakan alat berbasis shell seperti dumpsys, am, content, dan pm.
  • Layanan aksesibilitas dan alat pengujian yang menggunakan API aksesibilitas (seperti UiAutomator) kini dapat mengambil informasi mendetail tentang properti jendela di layar yang dapat berinteraksi dengan pengguna yang dapat melihat. Untuk mengambil daftar objek AccessibilityWindowInfo, panggil metode getWindows() baru.
  • Class AccessibilityNodeInfo.AccessibilityAction baru memungkinkan Anda menentukan tindakan standar atau yang disesuaikan untuk dilakukan pada AccessibilityNodeInfo. Class AccessibilityNodeInfo.AccessibilityAction yang baru menggantikan API terkait tindakan yang sebelumnya ditemukan di AccessibilityNodeInfo.
  • Android 5.0 memberikan kontrol lebih detail atas sintesis teks-ke-suara di aplikasi Anda. Class Voice yang baru memungkinkan aplikasi Anda menggunakan profil suara yang dikaitkan dengan lokalitas, kualitas, dan rating latensi tertentu, serta parameter khusus mesin teks-ke-suara.

IME

Berganti bahasa masukan dengan lebih mudah

Mulai Android 5.0, pengguna dapat lebih mudah beralih antara semua editor metode input (IME) yang didukung oleh platform. Melakukan tindakan beralih yang ditentukan (biasanya dengan menyentuh ikon Bola Dunia di keyboard virtual) akan berputar melalui semua IME tersebut. Perubahan perilaku ini diimplementasikan oleh metode shouldOfferSwitchingToNextInputMethod().

Selain itu, framework kini akan memeriksa apakah IME berikutnya menyertakan mekanisme peralihan (dan, dengan demikian, apakah IME mendukung peralihan ke IME setelahnya). IME yang memiliki mekanisme peralihan tidak akan berpindah ke IME yang tidak memilikinya. Perubahan perilaku ini diimplementasikan oleh metode switchToNextInputMethod().

Untuk melihat contoh cara menggunakan API peralihan IME terbaru, lihat contoh implementasi keyboard virtual terbaru di rilis ini. Untuk mempelajari lebih lanjut cara mengimplementasikan peralihan antar-IME, lihat Membuat Metode Input.

Deklarasi Manifes

Fitur wajib yang bisa dideklarasikan

Nilai berikut sekarang didukung di elemen <uses-feature>, sehingga Anda dapat memastikan bahwa aplikasi hanya diinstal di perangkat yang menyediakan fitur yang dibutuhkan aplikasi Anda.

Izin pengguna

Izin berikut kini didukung di elemen <uses-permission> untuk mendeklarasikan izin yang diperlukan aplikasi Anda untuk mengakses API tertentu.

  • BIND_DREAM_SERVICE: Saat menargetkan API level 21 dan yang lebih tinggi, izin ini diperlukan oleh layanan Daydream, untuk memastikan bahwa hanya sistem yang dapat mengikatnya.