How to Check the Type of Charging (USB/AC) in Android Programmatically?

When altering the frequency of the background updates to scale back the effect of these updates on battery life, checking the present battery level and charging state is a superb place to start. The battery-life impact of performing application updates depends on the battery level and charging state of the device. The effect of performing updates while the device is charging over AC is negligible, so in most cases, maximize the refresh rate whenever the device is connected to a wall charger. Conversely, if the device is discharging, reducing the update rate helps prolong the battery life. Similarly, you’ll check the battery charge level, potentially reducing the frequency of—or even stopping—the updates when the battery charge is almost exhausted. There are 2 types of charging in any smartphone:

  • USB Charging: Universal Serial Bus Charging: Charging from USB outlets such as USB port of a Laptop: 500 milliamps max.
  • AC Charging: Alternating Current Charging: Charging from a wall charger: 2 amps max.

A sample GIF is given below to get an idea about what we are going to do in this article. Note that we are going to implement this project using the Kotlin language. 

Types of charging

Approach

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.



Step 2: Working with the activity_main.xml file

Go to the activity_main.xml file, which represents the UI of the project. Add a Button, so whenever the user will click on the Button a Toast message with types of battery charging will be popped up on the screen. Below is the code for the activity_main.xml file.

XML

filter_none

edit
close

play_arrow

link
brightness_4
code

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Click"
        />
  
</RelativeLayout>

chevron_right


Step 3: Working with the MainActivity.kt file

Finally, go to the MainActivity.kt file, and refer the following code. Below is the code for the MainActivity.kt file. Comments are added inside the code to understand the code in more detail.

Kotlin

filter_none

edit
close

play_arrow

link
brightness_4
code

import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Button onclick will display the type of charging
        val btn = findViewById<Button>(R.id.btn)
        btn.setOnClickListener {
  
            // Intent to check the actions on battery
            val batteryStatus: Intent? =
                IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
                    applicationContext.registerReceiver(null, ifilter)
                }
  
            // isCharging if true indicates charging is ongoing and vice-versa
            val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
            val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
                    || status == BatteryManager.BATTERY_STATUS_FULL
  
            // usbCharge is true when connected to usb port and same with the ac wall charger
            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
  
            // Display whatever the state in the form of a Toast
            when {
                usbCharge -> {
                    Toast.makeText(applicationContext, "USB Charging", Toast.LENGTH_LONG).show()
                }
                acCharge -> {
                    Toast.makeText(applicationContext, "AC Charging", Toast.LENGTH_LONG).show()
                }
                else -> {
                    Toast.makeText(applicationContext, "Not Charging", Toast.LENGTH_LONG).show()
                }
            }
        }
    }
}

chevron_right


Output: Run on Physical Device

Keep an eye on the battery status in the status bar. The sequence of actions:

  1. Initially not connected.
  2. Connected to the USB port of the laptop.
  3. Disconnected.
  4. Connected to AC wall charger.
  5. Disconnected.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.