Giới thiệu
Bài viết này trình bày cách theo dõi trạng thái pin (battery state) và mức pin (battery level) trên iOS sử dụng framework UIKit.
Các bước thực hiện
Bước 1: Tạo dự án mới
Mở Xcode → New Project → Single View Application → Đặt tên "BatteryState".
Bước 2: Thiết kế giao diện
Thêm hai nhãn (UILabel) lên Main.storyboard để hiển thị trạng thái và mức pin.

Bước 3: Bật theo dõi pin
Trong viewDidLoad, kích hoạt theo dõi pin:
UIDevice.current.isBatteryMonitoringEnabled = true
Bước 4: Định nghĩa thuộc tính batteryState
Tạo computed property để lấy trạng thái pin hiện tại:
var batteryState: UIDevice.BatteryState {
return UIDevice.current.batteryState
}
Bước 5: Đăng ký observer cho thay đổi mức pin
Trong viewDidLoad, thêm observer cho notification UIDevice.batteryLevelDidChangeNotification:
NotificationCenter.default.addObserver(self,
selector: #selector(batteryLevelDidChange),
name: UIDevice.batteryLevelDidChangeNotification,
object: nil)
Bước 6: Xử lý thay đổi trạng thái pin
Triển khai phương thức xử lý và cập nhật giao diện:
@objc func batteryLevelDidChange() {
updateBatteryStateLabel()
}
func updateBatteryStateLabel() {
var status = "Unknown"
switch batteryState {
case .charging: status = "Đang sạc"
case .unknown: status = "Không xác định"
case .unplugged: status = "Đang dùng pin"
case .full: status = "Đã đầy"
@unknown default: status = "Không xác định"
}
DispatchQueue.main.async {
self.batteryStateLabel.text = "Trạng thái pin: \(status)"
// Cập nhật mức pin nếu cần:
// self.batteryLevelLabel.text = "Mức pin: \(Int(UIDevice.current.batteryLevel * 100))%"
}
}
Bước 7: Khởi tạo hoàn chỉnh viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.isBatteryMonitoringEnabled = true
NotificationCenter.default.addObserver(self,
selector: #selector(batteryLevelDidChange),
name: UIDevice.batteryLevelDidChangeNotification,
object: nil)
updateBatteryStateLabel() // Hiển thị trạng thái ban đầu
}
Bước 8: Chạy thử trên thiết bị thật
Ứng dụng chỉ hoạt động chính xác trên thiết bị thật (không phải simulator). Kết quả:

Lưu ý quan trọng
- Luôn bật
isBatteryMonitoringEnabled = truetrước khi đọc trạng thái. - Sử dụng
DispatchQueue.main.asyncđể cập nhật UI từ notification. - Trên simulator, trạng thái pin thường trả về
.unknownhoặc mô phỏng. - Để đọc mức pin (0.0 - 1.0):
UIDevice.current.batteryLevel.