Ringkasan Fitur dan API

Android 12 memperkenalkan fitur dan API baru yang hebat bagi para developer. Bagian di bawah ini membantu Anda mempelajari fitur-fitur yang tersedia untuk aplikasi Anda, serta mulai menggunakan API yang terkait.

Untuk melihat daftar mendetail tentang API yang baru, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API baru, kunjungi referensi API Android — API baru ditandai agar lebih mudah dilihat. Selain itu, untuk mempelajari area mana saja dalam aplikasi Anda yang dapat terpengaruh oleh perubahan, baca tentang perubahan perilaku Android 12 untuk aplikasi yang menargetkan Android 12 dan untuk semua aplikasi.

Pengalaman baru

Peningkatan widget

Android 12 mengubah API Widget yang ada untuk meningkatkan pengalaman pengguna dan developer di platform dan peluncur. Kami telah membuat panduan untuk membantu memastikan bahwa widget Anda kompatibel dengan Android 12 dan untuk menyegarkan widget tersebut dengan fitur baru.

Lihat peningkatan widget Android 12 untuk informasi selengkapnya.

Efek sentuhan yang digabungkan audio

Aplikasi Android 12 dapat membuat info via sentuhan yang berasal dari sesi audio menggunakan getaran ponsel. Dengan begitu, Anda memiliki kesempatan untuk memberikan pengalaman bermain game dan mendengarkan audio yang lebih imersif. Misalnya, nada dering yang ditingkatkan via sentuhan dapat membantu mengidentifikasi penelepon, atau game mengemudi dapat menyimulasikan nuansa medan yang kasar.

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi HapticGenerator

API layar pembuka

Android 12 memperkenalkan animasi peluncuran aplikasi baru untuk semua aplikasi yang menyertakan gerakan ke dalam aplikasi dari titik peluncuran, layar pembuka yang menampilkan ikon aplikasi, serta transisi ke aplikasi tersebut. Lihat API layar pembuka untuk detail selengkapnya.

Notifikasi panggilan telepon baru memungkinkan untuk menentukan urutan panggilan masuk

Android 12 menambahkan gaya notifikasi baru Notification.CallStyle untuk panggilan telepon. Dengan menggunakan template ini, aplikasi Anda akan dapat menunjukkan pentingnya panggilan aktif dengan menampilkan chip yang muncul, yang menunjukkan waktu panggilan di status bar. Pengguna dapat mengetuk chip ini untuk kembali ke panggilannya.

Karena panggilan masuk dan sedang berlangsung merupakan yang hal paling penting bagi pengguna, notifikasi ini diberi urutan teratas pada menu. Urutan ini juga memungkinkan sistem untuk meneruskan panggilan yang diprioritaskan ini ke perangkat lain.

Terapkan kode berikut untuk semua jenis panggilan.

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Gunakan forIncomingCall() untuk membuat notifikasi gaya panggilan untuk panggilan masuk.

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Gunakan forOngoingCall() untuk membuat notifikasi gaya panggilan pada panggilan yang sedang berlangsung.

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Gunakan forScreeningCall() untuk membuat notifikasi gaya panggilan guna menyaring panggilan.

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Dukungan gambar yang diperkaya untuk notifikasi

Di Android 12, Anda kini dapat memperkaya pengalaman notifikasi aplikasi dengan menyediakan gambar animasi di notifikasi MessagingStyle() dan BigPictureStyle() . Selain itu, aplikasi Anda kini dapat memungkinkan pengguna mengirim pesan gambar saat mereka membalas pesan dari menu notifikasi.

API sudut bulat

Android 12 memperkenalkan RoundedCorner dan WindowInsets.getRoundedCorner(int position), yang memberikan radius dan titik tengah untuk sudut bulat. Dengan API ini, aplikasi Anda dapat mencegah elemen UI terpotong di layar dengan sudut bulat.

Saat diterapkan di aplikasi Anda, API ini tidak berpengaruh pada perangkat dengan layar yang tidak bulat.

Gambar yang menampilkan sudut bulat dengan radius dan titik tengah

Untuk menerapkan fitur ini, dapatkan info RoundedCorner melalui WindowInsets.getRoundedCorner(int position) relatif ke batas aplikasi. Jika aplikasi tidak memenuhi seluruh layar, API akan menerapkan sudut bulat dengan mendasarkan titik tengah sudut bulat pada batas jendela aplikasi.

Cuplikan kode berikut menunjukkan contoh sederhana bagi aplikasi untuk menghindari pemotongan UI dengan menyetel margin tampilan berdasarkan informasi dari RoundedCorner. Dalam hal ini, contoh tersebut merupakan sudut bulat kanan atas.

// Get the top-right rounded corner from WindowInsets.
final WindowInsets insets = getRootWindowInsets();
final RoundedCorner topRight = insets.getRoundedCorner(POSITION_TOP_RIGHT);
if (topRight == null) {
   return;
}

// Get the location of the close button in window coordinates.
int [] location = new int[2];
closeButton.getLocationInWindow(location);
final int buttonRightInWindow = location[0] + closeButton.getWidth();
final int buttonTopInWindow = location[1];

// Find the point on the quarter circle with a 45 degree angle.
final int offset = (int) (topRight.getRadius() * Math.sin(Math.toRadians(45)));
final int topBoundary = topRight.getCenter().y - offset;
final int rightBoundary = topRight.getCenter().x + offset;

// Check whether the close button exceeds the boundary.
if (buttonRightInWindow < rightBoundary && buttonTopInWindow > topBoundary) {
   return;
}

// Set the margin to avoid truncating.
int [] parentLocation = new int[2];
getLocationInWindow(parentLocation);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) closeButton.getLayoutParams();
lp.rightMargin = Math.max(buttonRightInWindow - rightBoundary, 0);
lp.topMargin = Math.max(topBoundary - buttonTopInWindow, 0);
closeButton.setLayoutParams(lp);

Peningkatan Picture-in-Picture (PiP)

Android 12 memperkenalkan fitur baru untuk mode picture-in-picture (PiP). Untuk informasi selengkapnya, lihat Peningkatan picture-in-picture .

Peningkatan mode imersif untuk navigasi gestur

Android 12 menyederhanakan mode imersif guna membuat navigasi gestur lebih mudah dan lebih konsisten dengan pengalaman aktivitas lainnya, seperti menonton video dan membaca buku. Aplikasi masih dapat melindungi dari terjadinya gestur tidak disengaja dalam pengalaman bermain game layar penuh agar pengguna tidak keluar dari game secara tidak sengaja ketika bermain. Semua pengalaman layar penuh atau imersif lainnya kini memungkinkan pengguna mengendalikan ponsel mereka dengan sekali geser.

Untuk mewujudkan hal ini, perilaku yang ada untuk pengalaman imersif yang tidak melekat (BEHAVIOR_SHOW_BARS_BY_TOUCH, BEHAVIOR_SHOW_BARS_BY_SWIPE) tidak digunakan lagi mulai di Android 12. Perilaku ini telah diganti dengan perilaku default (BEHAVIOR_DEFAULT) sehingga gestur dapat dilakukan dengan sekali geser saat menyembunyikan kolom sistem. Tanda ini menunjukkan berbagai perilaku visual dan fungsional, bergantung pada mode:

  • Dalam mode tiga tombol, perilaku visual dan fungsional sama dengan mode imersif dalam versi sebelum Android 12.
  • Dalam mode navigasi gestur, perilakunya adalah sebagai berikut:
    • Dari segi visual, mode ini sama dengan mode imersif di Android 11 dan yang lebih rendah.
    • Dari segi fungsi, gestur diperbolehkan meskipun kolom disembunyikan; sistem hanya memerlukan sekali geser untuk memanggil, bukan dua kali geser yang diperlukan seperti di Android 11. Tidak ada geser tambahan yang diperlukan untuk menarik baris notifikasi ke bawah atau mulai membuka Beranda.

Mode imersif melekat (BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE) masih tetap sama di Android 12. Perhatikan kompatibilitas mundur berikut pada fitur ini:

Penyisipan konten lengkap

Android 12 memperkenalkan API terpadu baru yang memungkinkan Anda menerima konten lengkap dari sumber yang tersedia, seperti papan klip, keyboard, atau tarik lalu lepas.

Untuk mengetahui informasi selengkapnya, lihat API terpadu untuk menerima konten.

Kamera

Dukungan sensor kamera Quad Bayer

Banyak perangkat Android saat ini dilengkapi dengan sensor kamera beresolusi tinggi biasanya dengan pola Quad/Nona Bayer, dan perangkat ini menawarkan fleksibilitas tinggi dalam hal kualitas gambar dan performa cahaya yang rendah. Android 12 memperkenalkan API platform baru yang memungkinkan aplikasi pihak ketiga memanfaatkan sepenuhnya sensor serbaguna ini. API baru mendukung perilaku unik sensor ini dan akan mempertimbangkan bahwa API tersebut mungkin mendukung konfigurasi dan kombinasi streaming yang berbeda saat beroperasi dalam mode resolusi penuh atau 'resolusi maksimum' vs mode 'default'.

Grafik dan gambar

Menyediakan aplikasi akses langsung ke pelacakan tombstone

Mulai dari Android 12, Anda dapat mengakses tombstone masalah pada native code aplikasi Anda sebagai buffering protokol melalui metode ApplicationExitInfo.getTraceInputStream(). Buffering protokol diserialisasi menggunakan skema ini. Sebelumnya, satu-satunya cara untuk mendapatkan akses ke informasi ini adalah melalui Android Debug Bridge (adb).

Berikut salah satu contoh cara penerapannya pada aplikasi Anda:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for ( ApplicationExitInfo aei: exitReasons ) {
    if ( aei.getReason() == REASON_CRASH_NATIVE ) {
        // Get the tombstone input stream.
        InputStream tombstoneInputStream = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

Dukungan gambar AVIF

Android 12 memperkenalkan dukungan untuk gambar yang menggunakan Format File Image AV1 (AVIF). AVIF adalah format penampung untuk gambar dan urutan gambar yang dienkode menggunakan AV1. Cara ini memanfaatkan konten berenkode intra-frame dari kompresi video. Proses ini akan meningkatkan kualitas gambar untuk ukuran file yang sama secara signifikan jika dibandingkan dengan format gambar lama, seperti JPEG. Untuk melihat lebih dalam tentang manfaat format ini, lihat postingan blog dari Jake Archibald.

Memblur, memfilter warna, dan memberi efek lainnya menjadi lebih mudah

Android 12 menambahkan RenderEffect baru yang menerapkan efek grafis umum seperti blur, filter warna, efek shader Android, dan lainnya ke View dan hierarki perenderan. Efek dapat digabungkan sebagai efek berantai (yang membentuk efek dalam dan luar) atau efek campuran. Perangkat Android yang berbeda mungkin mendukung atau tidak mendukung fitur ini karena keterbatasan daya pemrosesan.

Efek juga dapat diterapkan pada RenderNode yang mendasarinya untuk View dengan memanggil View.setRenderEffect(RenderEffect).

Untuk menerapkan RenderEffect:

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Dekode gambar animasi native

Pada Android 12, API ImageDecoder NDK telah diperluas untuk mendekode semua data frame dan waktu dari gambar yang menggunakan format file GIF animasi dan WebP. Saat diperkenalkan di Android 11, API ini hanya mendekode gambar pertama dari animasi dalam format ini.

Gunakan ImageDecoder, bukan library pihak ketiga, untuk mengurangi ukuran APK lebih banyak dan dapatkan manfaat dari update selanjutnya yang terkait dengan keamanan dan performa.

Untuk mengetahui detail API selengkapnya, lihat referensi API dan sampel di GitHub.

Media

Transcoding media yang kompatibel

Android 12 dapat secara otomatis mentranskode video HEVC(H.265) dan HDR (HDR10 dan HDR10+) yang direkam di perangkat menjadi format AVC (H.264), format yang kompatibel dengan berbagai versi pemutar standar. Cara ini memanfaatkan codec modern jika tersedia tanpa mengorbankan kompatibilitas dengan versi aplikasi yang lebih lama.

Untuk mengetahui detail selengkapnya, lihat transcoding media yang kompatibel.

Class performa

Mulai dari Android 12, Android akan memperkenalkan sebuah standar yang disebut class performa. Class performa akan menentukan kemampuan hardware di luar persyaratan dasar Android. Setiap perangkat Android akan mendeklarasikan class performa yang didukungnya. Developer dapat memeriksa class performa perangkat pada waktu proses dan memberikan pengalaman yang diupgrade guna memanfaatkan kemampuan perangkat secara penuh.

Lihat Class performa untuk mengetahui detail selengkapnya.

Peningkatan encoding video

Android 12 menentukan kumpulan kunci standar untuk mengontrol nilai parameter Kuantisasi (QP) untuk encoding video yang akan memungkinkan developer untuk menghindari kode khusus vendor.

Kunci baru tersedia di API MediaFormat dan juga di library NDK Media.

Dimulai dengan encoder video Android 12 yang menerapkan batas kualitas minimum. Ini menjamin pengguna tidak akan mendapatkan kualitas yang sangat rendah saat mengenkode video dengan kompleksitas adegan yang tinggi.

Fokus audio

Dimulai dari Android 12, ketika aplikasi meminta fokus audio saat aplikasi lain memiliki fokus dan juga sedang diputar, framework akan memudarkan aplikasi yang sedang memutar.

Lihat peningkatan fokus audio untuk detail selengkapnya.

Update MediaDrm

Untuk menentukan apakah komponen decoder aman diperlukan dengan MediaDrm API saat ini, Anda harus mengikuti langkah-langkah berikut:

  1. Buat MediaDrm.
  2. Buka sesi untuk mendapatkan ID sesi.
  3. Buat MediaCrypto menggunakan ID sesi.
  4. Panggil MediaCrypto.requiresSecureDecoderComponent(mimeType).

Dengan metode baru requiresSecureDecoder(@NonNull String mime) dan requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) Anda dapat menentukannya segera setelah membuat MediaDrm.

Keamanan dan privasi

Izin Bluetooth

Android 12 memperkenalkan izin BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, dan BLUETOOTH_CONNECT . Izin ini mempermudah aplikasi yang menargetkan Android 12 untuk berinteraksi dengan perangkat Bluetooth, terutama untuk aplikasi yang tidak memerlukan akses ke lokasi perangkat.

Pelajari lebih lanjut di panduan tentang izin Bluetooth baru.

Dasbor Privasi

Linimasa vertikal menampilkan berbagai aplikasi yang telah
          mengakses informasi lokasi, dan pada waktu apa akses tersebut terjadi
Gambar 1. Layar penggunaan lokasi, bagian dari Dasbor Privasi.

Pada perangkat yang didukung yang akan menjalankan Android 12, layar Dasbor Privasi muncul di setelan sistem. Di layar ini, pengguna dapat mengakses layar terpisah yang muncul saat aplikasi mengakses informasi lokasi, kamera, dan mikrofon. Setiap layar menampilkan linimasa saat aplikasi yang berbeda telah mengakses jenis data tertentu. Gambar 1 menunjukkan linimasa akses data untuk informasi lokasi.

Aplikasi Anda dapat memberikan alasan bagi pengguna, untuk membantu mereka memahami mengapa aplikasi Anda mengakses informasi lokasi, kamera, atau mikrofon. Alasan ini dapat muncul di layar Dasbor Privasi yang baru, layar izin aplikasi, atau keduanya.

Tampilkan alasan untuk akses data

Untuk menjelaskan alasan aplikasi Anda mengakses informasi lokasi, kamera, dan mikrofon, lakukan langkah-langkah berikut:

  1. Tambahkan aktivitas yang ketika dimulai, akan memberikan beberapa alasan mengapa aplikasi Anda melakukan jenis tindakan akses data tertentu.

    Jika aplikasi Anda menargetkan Android 12 atau yang lebih tinggi, secara eksplisit Anda harus menentukan nilai untuk atribut android:exported.

  2. Tambahkan filter intent berikut ke aktivitas yang baru ditambahkan:

    <!-- android:exported required if you target Android 12. -->
    <activity android:name=".DataAccessRationaleActivity"
              android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
              android:exported="true">
           <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on
                your app permission's page in system settings.
                VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information
                icon on the Privacy Dashboard screen. -->
        <intent-filter
           android:action="android.intent.action.VIEW_PERMISSION_USAGE"
           android:action="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" ... >
        </intent-filter>
    </activity>
    
  3. Tentukan apa yang harus ditampilkan oleh aktivitas rasional akses data Anda. Misalnya, Anda dapat menampilkan situs web aplikasi atau artikel pusat bantuan. Untuk memberikan penjelasan yang lebih terperinci tentang jenis data yang diakses oleh aplikasi Anda, dan juga saat akses terjadi, tangani sistem tambahan termasuk saat sistem tersebut mengaktifkan maksud penggunaan izin:

Bergantung pada filter intent yang akan Anda tambahkan, pengguna akan melihat ikon informasi di samping nama aplikasi pada layar tertentu:

  • Jika Anda menambahkan filter intent yang berisi tindakan VIEW_PERMISSION_USAGE , pengguna akan melihat ikon di halaman izin aplikasi di setelan sistem.
  • Jika Anda menambahkan filter intent yang berisi tindakan VIEW_PERMISSION_USAGE_FOR_PERIOD, pengguna akan melihat ikon di samping nama aplikasi setiap kali aplikasi muncul di layar Dasbor Privasi.

Saat pengguna memilih ikon tersebut, aktivitas alasan aplikasi Anda akan dimulai.

Sembunyikan jendela overlay aplikasi

Untuk memberi developer kontrol lebih besar atas apa yang dilihat pengguna saat mereka berinteraksi dengan aplikasi developer, Android 12 memperkenalkan kemampuan untuk menyembunyikan jendela overlay yang digambar oleh aplikasi yang memiliki izin SYSTEM_ALERT_WINDOW.

Setelah menyatakan HIDE_OVERLAY_WINDOWS, aplikasi dapat memanggil setHideOverlayWindows() untuk menunjukkan bahwa semua jenis jendela TYPE_APPLICATION_OVERLAY harus disembunyikan saat jendela aplikasi terlihat. Aplikasi dapat memilih untuk melakukannya saat menampilkan layar sensitif, seperti alur konfirmasi transaksi.

Aplikasi yang menampilkan jendela jenis TYPE_APPLICATION_OVERLAY harus mempertimbangkan alternatif yang mungkin lebih sesuai untuk kasus penggunaannya, seperti picture-in-picture atau balon.

Tanda perlindungan izin penanda tangan yang diketahui

Android 12 memperkenalkan atribut knownCerts untuk izin level tanda tangan. Atribut ini memungkinkan Anda merujuk ke ringkasan sertifikat penandatanganan yang diketahui pada waktu deklarasi.

Aplikasi Anda dapat mendeklarasikan atribut ini dan menggunakan tanda knownSigner baru dalam atribut protectionLevel untuk izin level tanda tangan yang diberikan. Ketika aplikasi Anda melakukannya, sistem akan memberikan izin ke aplikasi yang meminta jika ada penanda tangan dalam urutan penandatangan aplikasi yang meminta, termasuk penanda tangan saat ini yang sesuai dengan salah satu ringkasan yang dideklarasikan dengan izin dalam atribut knownCerts.

Tanda knownSigner memungkinkan perangkat dan aplikasi memberikan izin tanda tangan ke aplikasi lain tanpa harus menandatangani aplikasi pada saat pembuatan dan pengiriman perangkat.

Pengesahan properti perangkat

Android 12 memperluas rangkaian aplikasi yang dapat memverifikasi properti perangkat yang berada dalam sertifikat pengesahan saat aplikasi ini membuat kunci baru.

Pada Android 9 (API level 28), pemilik kebijakan perangkat (DPO) yang menggunakan Keymaster 4.0 atau yang lebih tinggi dapat memverifikasi properti perangkat di sertifikat pengesahan ini. Mulai di Android 12, aplikasi apa pun yang menargetkan Android 12 dapat melakukan verifikasi ini menggunakan metode setDevicePropertiesAttestationIncluded().

Properti perangkat yang dihasilkan mencakup kolom Build berikut:

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Tindakan notifikasi layar penguncian yang aman

Android 12 menambahkan tanda setAuthenticationRequired baru ke Notification.Action.Builder. Tanda ini memungkinkan Anda untuk menambahkan lapisan keamanan tambahan pada notifikasi di perangkat yang terkunci.

Ketika tanda ini diterapkan dengan nilai true ke tindakan notifikasi tertentu, pengguna yang menerapkan tindakan tersebut pada perangkat yang terkunci akan selalu menghasilkan permintaan autentikasi. Sebelumnya, sistem meminta autentikasi hanya pada perangkat yang terkunci jika pengguna memanggil tindakan notifikasi yang meluncurkan aktivitas atau balasan langsung.

Untuk mengimplementasikan fitur ini, tambahkan setAuthenticationRequired ke tindakan notifikasi:

Notification n1 = new Notification.Builder(context, NotificationListenerVerifierActivity.TAG)
...
.addAction(new Notification.Action.Builder(R.drawable.ic_stat_charlie,
context.getString(R.string.action_test_title), makeBroadcastIntent(context))

// Make sure this notification action will always request authentication when
// invoked from a lock screen
.setAuthenticationRequired(true).build())

.build();

Konektivitas

Peningkatan estimasi bandwidth

Pada Android 12, kemampuan estimasi bandwidth yang disediakan oleh getLinkDownstreamBandwidthKbps(), dan getLinkUpstreamBandwidthKbps() ditingkatkan agar Wi-Fi dan konektivitas seluler yang lebih baik. Nilai yang ditampilkan sekarang mewakili throughput rata-rata tertimbang sepanjang waktu dari pengguna setiap operator atau SSID WiFi, jenis jaringan, dan level sinyal di semua aplikasi pada perangkat. Hal ini dapat menampilkan perkiraan throughput yang diharapkan yang lebih akurat dan nyata, dapat memberikan estimasi tentang start cold aplikasi Anda, serta memerlukan lebih sedikit siklus jika dibandingkan dengan menggunakan metode estimasi throughput lainnya.

Menjaga aplikasi pendamping tetap aktif

Untuk mendukung kebutuhan aplikasi pendamping agar tetap berjalan guna mengelola perangkat, Android 12 memperkenalkan API yang akan melakukan hal berikut:

  • Memungkinkan Anda membangunkan aplikasi saat perangkat pendamping berada dalam jangkauan.
  • Menjamin bahwa proses akan terus berjalan saat perangkat berada dalam jangkauan.

Untuk menggunakan API, perangkat Anda harus terhubung dengan menggunakan Pengelola Perangkat Pendamping. Untuk informasi selengkapnya, lihat CompanionDeviceManager.startObservingDevicePresence() dan CompanionDeviceService.onDeviceAppeared().

Profil Pengelola Perangkat Pendamping

Aplikasi partner yang menargetkan Android 12 dan versi yang lebih tinggi kini dapat menggunakan profil perangkat pendamping saat terhubung ke jam tangan. Menggunakan profil dapat menyederhanakan proses pendaftaran dengan menggabungkan pemberian sekumpulan izin khusus jenis perangkat ke dalam satu langkah.

Screenshot ponsel akan menampilkan permintaan penawaran untuk memberikan izin

Izin paket diberikan ke aplikasi pendamping setelah perangkat terhubung, dan hanya berlangsung selama perangkat terasosiasi. Menghapus aplikasi atau menghapus pengaitan akan menghapus izin.

Untuk informasi selengkapnya, lihat AssociationRequest.Builder.setDeviceProfile().

Penyempurnaan Wi-Fi Aware (NAN)

Android 12 menambahkan beberapa penyempurnaan pada Wi-Fi Aware:

  • Pada perangkat yang menjalankan Android 12 dan yang lebih tinggi, Anda dapat menggunakan callback onServiceLost() untuk mendapatkan notifikasi saat layanan yang telah ditemukan oleh aplikasi Anda hilang karena layanan berhenti atau keluar dari jangkauan.
  • Cara beberapa jalur data (Jalur Data NAN) yang disiapkan berubah menjadi lebih efisien. Versi sebelumnya menggunakan pesan L2 untuk bertukar informasi pembanding dari pembuat, yang memperkenalkan latensi. Pada perangkat yang menjalankan Android 12 dan yang lebih tinggi, penjawab (server) dapat dikonfigurasi untuk menerima pembanding yang artinya bahwa informasi awal tidak perlu diketahui. Hal ini dapat mempercepat pengumpulan data dan memungkinkan beberapa link titik ke titik hanya dengan satu permintaan jaringan.
  • Pada perangkat yang menjalankan Android 12 dan yang lebih tinggi, Anda dapat memanggil WifiAwareManager.getAvailableAwareResources().untuk mencegah agar framework tidak menolak permintaan penemuan atau sambungan karena resource habis. Dengan nilai hasil metode ini, Anda bisa mendapatkan jumlah jalur data, jumlah sesi publikasi, dan jumlah sesi berlangganan yang tersedia.

Peer-to-Peer + Koneksi Internet Serentak

Jika perangkat yang menargetkan Android 12 dan yang lebih tinggi berjalan di perangkat yang memiliki dukungan hardware, penggunaan koneksi peer-to-peer tidak akan memutuskan koneksi Wi-Fi yang ada saat membuat koneksi ke perangkat pembanding. Untuk memeriksa dukungan fitur ini, gunakan WifiManager.isMultiStaConcurrencySupported().

Penyimpanan

Android 12 memperkenalkan beberapa perubahan pada API pengelolaan penyimpanan yang dijelaskan pada bagian berikut.

Direktori baru untuk rekaman suara

Sistem akan mengenali file audio yang disimpan di folder Environment.DIRECTORY_RECORDINGS baru sebagai rekaman. Saat aplikasi menjalankan kueri di penyimpanan media sistem, Anda dapat mengambil rekaman dengan menggunakan tanda IS_RECORDING .

Akses pengelolaan media

Pengguna mungkin akan memercayai aplikasi tertentu untuk menjalankan pengelolaan media, seperti sering mengedit file media. Jika aplikasi Anda menargetkan Android 11 (API level 30) atau yang lebih tinggi dan bukan aplikasi galeri default perangkat, Anda harus menampilkan dialog konfirmasi kepada pengguna setiap kali aplikasi mencoba untuk mengubah atau menghapus file.

Jika aplikasi Anda menargetkan Android 12, Anda dapat meminta pengguna untuk memberikan izin ke aplikasi guna melakukan setiap hal berikut tanpa perlu meminta pada pengguna setiap operasi file:

Caranya, ikuti langkah-langkah berikut:

  1. Deklarasikan izin MANAGE_MEDIA baru dan izin READ_EXTERNAL_STORAGE di file manifes aplikasi Anda.

    Untuk memanggil createWriteRequest() tanpa menampilkan dialog konfirmasi, deklarasikan juga izin ACCESS_MEDIA_LOCATION.

  2. Di aplikasi, tampilkan UI kepada pengguna untuk menjelaskan alasan mengapa pengguna ingin memberikan akses pengelolaan media ke aplikasi Anda.

  3. Panggil tindakan intent ACTION_REQUEST_MANAGE_MEDIA. Tindakan ini akan mengarahkan pengguna ke layar Aplikasi pengelolaan media di setelan sistem. Dari sini, pengguna dapat memberikan akses aplikasi khusus.

Akses penyimpanan aplikasi

Aplikasi dapat mendeklarasikan dan membuat aktivitas kustom, yang saat diluncurkan akan memungkinkan pengguna mengelola data yang telah disimpan oleh aplikasi di perangkat pengguna. Aplikasi mendeklarasikan aktivitas "kelola ruang" kustom ini menggunakan atribut android:manageSpaceActivity dalam file manifes. Aplikasi pengelola file dapat meluncurkan aktivitas "kelola ruang" ini meskipun aplikasi tidak mengekspor aktivitas; yaitu, pada saat aktivitas ditetapkan android:exported ke false.

Di Android 12, aplikasi yang memiliki izin MANAGE_EXTERNAL_STORAGE dan izin QUERY_ALL_PACKAGES—seperti aplikasi pengelolaan file—dapat menggunakan getManageSpaceActivityIntent() baru untuk mengirim pengguna ke aktivitas "kelola ruang" kustom aplikasi lain, jika salah satunya sudah ditentukan untuk aplikasi lain tersebut.

Metode getManageSpaceActivityIntent() menggunakan nama paket dan kode permintaan, serta mengembalikan salah satu dari berikut ini:

  • PendingIntent, jika aplikasi dengan nama paket yang ditentukan telah menentukan aktivitas "kelola ruang" khusus. Aplikasi yang memanggil metode getManageSpaceActivityIntent() kemudian dapat memanggil intent yang ditampilkan untuk mengarahkan pengguna ke aktivitas kustom.
  • null, jika aplikasi dengan nama paket yang ditentukan tidak menentukan aktivitas "kelola ruang".

Dukungan akses file yang diperluas

Metode getMediaUri() sekarang mendukung URI MediaDocumentsProvider, selain dukungan yang ada untuk URI ExternalStorageProvider. Sistem saat ini memberikan URI ke pemanggil sebelum menampilkannya.

Selain itu, URI media yang diberikan oleh createWriteRequest() kini mendukung API di class File. API ini memberikan kemampuan untuk membaca, menulis, mengganti nama, dan menghapus file.

Fungsi inti

Update aplikasi otomatis

Android 12 memperkenalkan metode setRequireUserAction() untuk aplikasi yang menggunakan API PackageInstaller. Metode ini memungkinkan aplikasi penginstall untuk melakukan update aplikasi tanpa mengharuskan pengguna untuk mengonfirmasi tindakan.

Informasi chipset perangkat

Android 12 menambahkan dua konstanta ke android.os.Build yang mengekspos informasi vendor dan model chipet SoC melalui SDK. Anda dapat mengambil informasi ini dengan memanggil Build.SOC_MANUFACTURER dan Build.SOC_MODEL masing-masing.