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

Cách lấy mức pin và trạng thái sạc (đang sạc, đầy, rút cáp) trên iOS

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.

Cách lấy mức pin và trạng thái sạc (đang sạc, đầy, rút cáp) trên iOS

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ả:

Cách lấy mức pin và trạng thái sạc (đang sạc, đầy, rút cáp) trên iOS

Lưu ý quan trọng

  • Luôn bật isBatteryMonitoringEnabled = true trướ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ề .unknown hoặc mô phỏng.
  • Để đọc mức pin (0.0 - 1.0): UIDevice.current.batteryLevel.