Mengoptimalkan penggunaan data jaringan

Selama penggunaan smartphone, biaya paket data seluler bisa saja melebihi harga perangkat itu sendiri. Dari Android 7.0 (API level 24), pengguna dapat mengaktifkan Penghemat Data pada seluruh perangkat guna mengoptimalkan penggunaan data perangkat, dan menggunakan data yang lebih sedikit. Kemampuan ini sangat berguna saat roaming, mendekati akhir siklus tagihan, atau untuk paket data prabayar kecil.

Jika pengguna mengaktifkan Penghemat Data di Setelan dan perangkat berada dalam jaringan berbayar, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi untuk menghemat penggunaan data latar depan jika memungkinkan. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data latar belakang berbayar jika Penghemat Data diaktifkan.

Android 7.0 (API level 24) memperluas ConnectivityManager API untuk menyediakan aplikasi dengan cara mengambil preferensi Penghemat Data pengguna dan memantau perubahan preferensi. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah pengguna telah mengaktifkan Penghemat Data dan berupaya membatasi penggunaan data latar depan dan latar belakang.

Memeriksa preferensi penghemat data

Di Android 7.0 (API level 24), aplikasi dapat menggunakan API ConnectivityManager untuk menentukan batasan penggunaan data apa yang sedang diterapkan. Metode getRestrictBackgroundStatus() akan mengembalikan salah satu dari nilai berikut:

RESTRICT_BACKGROUND_STATUS_DISABLED
Penghemat Data dinonaktifkan.
RESTRICT_BACKGROUND_STATUS_ENABLED
Pengguna telah mengaktifkan Penghemat Data untuk aplikasi ini. Aplikasi harus berupaya membatasi penggunaan data di latar depan dan menangani dengan baik pembatasan penggunaan data latar belakang.
RESTRICT_BACKGROUND_STATUS_WHITELISTED
Pengguna telah mengaktifkan Penghemat Data namun aplikasi telah dimasukkan daftar putih. Aplikasi harus tetap berupaya membatasi penggunaan data latar depan dan latar belakang.

Hal ini dianggap praktik terbaik untuk membatasi penggunaan data jika perangkat terhubung ke jaringan berbayar, bahkan jika Penghemat Data dinonaktifkan atau aplikasi dimasukkan daftar putih. Kode sampel berikut menggunakan ConnectivityManager.isActiveNetworkMetered() dan ConnectivityManager.getRestrictBackgroundStatus() untuk menentukan berapa banyak data yang harus digunakan aplikasi:

Kotlin

(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
    // Checks if the device is on a metered network
    if (isActiveNetworkMetered) {
        // Checks user’s Data Saver settings.
        when (restrictBackgroundStatus) {
            RESTRICT_BACKGROUND_STATUS_ENABLED -> {
                // Background data usage is blocked for this app. Wherever possible,
                // the app should also use less data in the foreground.
            }
            RESTRICT_BACKGROUND_STATUS_WHITELISTED -> {
                // The app is whitelisted. Wherever possible,
                // the app should use less data in the foreground and background.
            }
            RESTRICT_BACKGROUND_STATUS_DISABLED -> {
                // Data Saver is disabled. Since the device is connected to a
                // metered network, the app should use less data wherever possible.
            }
        }
    } else {
        // The device is not on a metered network.
        // Use data as required to perform syncs, downloads, and updates.
    }
}

Java

ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);
// Checks if the device is on a metered network
if (connMgr.isActiveNetworkMetered()) {
  // Checks user’s Data Saver settings.
  switch (connMgr.getRestrictBackgroundStatus()) {
    case RESTRICT_BACKGROUND_STATUS_ENABLED:
    // Background data usage is blocked for this app. Wherever possible,
    // the app should also use less data in the foreground.

    case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
    // The app is whitelisted. Wherever possible,
    // the app should use less data in the foreground and background.

    case RESTRICT_BACKGROUND_STATUS_DISABLED:
    // Data Saver is disabled. Since the device is connected to a
    // metered network, the app should use less data wherever possible.
  }
} else {
  // The device is not on a metered network.
  // Use data as required to perform syncs, downloads, and updates.
}

Meminta izin daftar putih

Jika aplikasi Anda perlu menggunakan data di latar belakang, aplikasi dapat meminta izin daftar putih dengan mengirimkan intent Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS yang berisi URI dari nama paket aplikasi Anda: misalnya, package:MY_APP_ID.

Mengirim intent dan URI akan meluncurkan Setelan aplikasi dan menampilkan setelan penggunaan data untuk aplikasi Anda. Pengguna nanti bisa memutuskan apakah akan mengaktifkan data latar belakang untuk aplikasi Anda. Sebelum Anda mengirimkan intent ini, tanyakan kepada pengguna terlebih dahulu apakah mereka ingin membuka Setelan aplikasi dengan tujuan mengaktifkan penggunaan data latar belakang.

Memantau perubahan pada preferensi penghemat data

Aplikasi dapat memantau perubahan pada preferensi Penghemat Data dengan membuat BroadcastReceiver untuk memantau ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED dan secara dinamis mendaftarkan penerima dengan Context.registerReceiver(). Jika aplikasi menerima siaran ini, aplikasi harus memeriksa apakah preferensi Penghemat Data yang baru memengaruhi izinnya dengan memanggil ConnectivityManager.getRestrictBackgroundStatus().

Catatan: Sistem hanya mengirimkan siaran ini ke aplikasi yang secara dinamis mendaftar padanya dengan Context.registerReceiver(). Aplikasi yang mendaftar untuk menerima siaran ini dalam manifesnya tidak akan menerimanya.

Menguji dengan perintah Android Debug Bridge

Android Debug Bridge (ADB) menyediakan sedikit perintah yang dapat Anda gunakan untuk menguji aplikasi Anda dalam ketentuan Penghemat Data. Anda dapat memeriksa dan mengonfigurasi izin jaringan atau menyetel jaringan nirkabel sebagai berbayar untuk menguji aplikasi Anda di jaringan yang tidak berbayar.

$ adb shell dumpsys netpolicy
Menghasilkan laporan yang mencakup setelan pembatasan jaringan latar belakang global saat ini, paket UID yang saat ini ada di daftar putih, dan izin jaringan dari paket lain yang diketahui.
$ adb shell cmd netpolicy
Menampilkan daftar lengkap perintah Network Policy Manager (netpolicy).
$ adb shell cmd netpolicy set restrict-background <boolean>
Mengaktifkan atau menonaktifkan mode Penghemat Data saat meneruskan true atau false, masing-masing.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
Menambahkan UID paket tertentu ke daftar putih untuk mengizinkan penggunaan data berbayar di latar belakang.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
Menghapus UID paket tertentu dari daftar putih untuk memblokir penggunaan data berbayar di latar belakang saat Penghemat Data diaktifkan.
$ adb shell cmd netpolicy list wifi-networks
Membuat daftar semua jaringan wifi, menampilkan apakah jaringan berbayar.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
Menyetel wifi dengan SSID yang ditetapkan sebagai berbayar, sehingga memungkinkan Anda untuk mensimulasikan jaringan berbayar pada jaringan tidak berbayar.