Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Lấy mức pin (battery level) và trạng thái sạc trong Android

Mục tiêu

Đọc % pin và trạng thái (sạc/đang dùng) qua BatteryManager (API 21+).

Các bước

Bước 1: Tạo project

Bước 2: Layout activity_main.xml

<LinearLayout ... android:gravity="center" android:orientation="vertical">
    <TextView android:id="@+id/text" android:text="battery percentage" android:textSize="18sp" android:textAlignment="center" android:layout_width="match_parent" android:layout_height="wrap_content" />
</LinearLayout>

Bước 3: MainActivity.java

public class MainActivity extends AppCompatActivity {
    TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = findViewById(R.id.text);

        BatteryManager bm = (BatteryManager) getSystemService(BATTERY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            int level = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
            int status = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);
            
            String statusStr = "";
            switch (status) {
                case BatteryManager.BATTERY_STATUS_CHARGING: statusStr = "Charging"; break;
                case BatteryManager.BATTERY_STATUS_DISCHARGING: statusStr = "Discharging"; break;
                case BatteryManager.BATTERY_STATUS_FULL: statusStr = "Full"; break;
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING: statusStr = "Not charging"; break;
                default: statusStr = "Unknown";
            }
            text.setText("Battery: " + level + "% (" + statusStr + ")");
        }
    }
}

API chính (API 21+):

  • BatteryManager.BATTERY_PROPERTY_CAPACITY: % pin (0-100).
  • BatteryManager.BATTERY_PROPERTY_STATUS: Trạng thái.
  • BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER: Dung lượng hiện tại (µAh).
  • BatteryManager.BATTERY_PROPERTY_CURRENT_NOW: Dòng điện hiện tại (µA).

Cách cũ (BroadcastReceiver): Đăng ký ACTION_BATTERY_CHANGED để nhận intent sticky chứa EXTRA_LEVEL, EXTRA_SCALE, EXTRA_STATUS... (đồng bộ, không cần permission).

Kết quả

Hiển thị % pin (ví dụ 100%):

Lấy mức pin (battery level) và trạng thái sạc trong Android

Lưu ý

  • Cần API 21+ cho getIntProperty.
  • BroadcastReceiver cách cũ hoạt động mọi API nhưng phức tạp hơn.
  • Để monitor real-time: registerReceiver cho ACTION_BATTERY_CHANGED.