Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Memantau Level Daya dan Status Pengisian Daya Baterai

Saat Anda mengubah frekuensi update latar belakang guna mengurangi dampaknya terhadap masa pakai baterai, memeriksa level daya baterai dan status pengisian daya saat ini adalah tindakan awal yang baik.

Dampak menjalankan update dalam aplikasi terhadap masa pakai baterai bergantung pada level daya baterai dan status pengisian daya perangkat. Dampak menjalankan update saat daya perangkat sedang diisi menggunakan pengisi daya AC tidaklah signifikan, sehingga umumnya Anda dapat memaksimalkan frekuensi update setiap kali perangkat dihubungkan ke pengisi daya standar. Sebaliknya, jika daya perangkat sedang tidak diisi, mengurangi frekuensi update dapat membantu memperpanjang masa pakai baterai.

Demikian pula, Anda dapat memeriksa level daya baterai agar frekuensi update bisa dikurangi atau bahkan dihentikan saat daya baterai hampir habis.

Menentukan status pengisian daya saat ini

Mulai dengan menentukan status pengisian daya saat ini. BatteryManager menyiarkan semua detail baterai dan pengisian daya dalam Intent permanen yang menyertakan status pengisian daya.

Karena intent ini bersifat permanen, Anda tidak perlu menyertakan BroadcastReceiver. Cukup panggil registerReceiver dengan null sebagai penerimanya, seperti ditunjukkan dalam cuplikan di bawah, dan status baterai saat ini akan ditampilkan. Anda dapat memasukkan objek BroadcastReceiver aktual di sini, tetapi kita akan menangani update pada bagian berikutnya sehingga hal ini tidak perlu dilakukan.

Kotlin

    val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
        context.registerReceiver(null, ifilter)
    }
    

Java

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, ifilter);
    

Anda dapat mengekstrak status pengisian daya saat ini, dan apakah pengisian daya perangkat sedang berlangsung, baik diisi daya melalui USB atau pengisi daya AC.

Kotlin

    val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
    val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
            || status == BatteryManager.BATTERY_STATUS_FULL

    // How are we charging?
    val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1
    val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB
    val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC
    

Java

    // Are we charging / charged?
    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                         status == BatteryManager.BATTERY_STATUS_FULL;

    // How are we charging?
    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
    

Biasanya, Anda disarankan untuk memaksimalkan frekuensi update latar belakang pada saat perangkat terhubung ke pengisi daya AC, mengurangi frekuensinya jika pengisian daya dilakukan melalui USB, dan menguranginya lagi jika daya baterai sedang tidak diisi.

Memantau perubahan pada status pengisian daya

Status pengisian daya dapat berubah semudah menghubungkan perangkat ke pengisi daya, sehingga penting untuk memantau perubahan status pengisian daya dan menyesuaikan frekuensi update.

BatteryManager menyiarkan tindakan setiap kali perangkat dihubungkan atau dilepaskan dari pengisi daya. Menerima peristiwa-peristiwa tersebut adalah hal yang penting meskipun aplikasi Anda tidak dijalankan, khususnya karena peristiwa tersebut memengaruhi frekuensi dimulainya aplikasi guna menginisiasi update di latar belakang, sehingga Anda perlu menyertakan BroadcastReceiver dalam manifes untuk memproses kedua peristiwa tersebut dengan menentukan ACTION_POWER_CONNECTED dan ACTION_POWER_DISCONNECTED dalam filter intent.

<receiver android:name=".PowerConnectionReceiver">
      <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
      </intent-filter>
    </receiver>

Menentukan level daya baterai saat ini

Dalam beberapa kasus, menentukan level daya baterai saat ini juga merupakan tindakan yang berguna. Anda dapat memilih untuk mengurangi frekuensi update latar belakang jika daya baterai kurang dari level tertentu.

Anda dapat menemukan informasi daya baterai saat ini dengan mengekstrak level dan skala daya baterai saat ini dari intent status baterai seperti ditunjukkan di sini:

Kotlin

    val batteryPct: Float? = batteryStatus?.let { intent ->
        val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
        val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
        level * 100 / scale.toFloat()
    }
    

Java

    int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

    float batteryPct = level * 100 / (float)scale;
    

Memantau perubahan signifikan pada level daya baterai

Anda bisa dengan mudah memantau status baterai secara terus-menerus, tetapi hal ini tidak perlu dilakukan.

Pada umumnya, memantau level daya baterai secara terus-menerus berdampak lebih besar terhadap baterai dibandingkan perilaku normal aplikasi, sehingga sebaiknya cukup pantau perubahan yang signifikan pada level daya baterai, yaitu saat baterai perangkat masuk ke atau keluar dari keadaan lemah.

Cuplikan manifes di bawah diekstrak dari elemen filter intent dalam penerima siaran. Penerima akan terpicu setiap kali kondisi baterai lemah atau tidak lagi lemah dengan memproses ACTION_BATTERY_LOW dan ACTION_BATTERY_OKAY.

    <receiver android:name=".BatteryLevelReceiver">
      <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW"/>
        <action android:name="android.intent.action.BATTERY_OKAY"/>
      </intent-filter>
    </receiver>

Disarankan untuk menonaktifkan seluruh update latar belakang saat baterai hampir habis. Kuota paling baru sekalipun tidak akan berguna jika ponsel mati sebelum kuota tersebut dapat dimanfaatkan.

Pada banyak kasus, tindakan mengisi daya baterai perangkat bersamaan dengan menempatkannya di dok. Tutorial berikutnya akan menjelaskan cara menentukan status dok saat ini dan memantau perubahan pada pemasangan perangkat ke dok.