有任何方法可以通过编程方式检测iOS 9低功率模式?

问题描述 投票:0回答:5
我知道用户可以通过观察电池图标的颜色来检测低功率模式,但是是否有一个API调用,可以检测一个程序?

ios performance
5个回答
8
投票

Swift4.2

if #available(iOS 9.0, *) { if ProcessInfo.processInfo.isLowPowerModeEnabled { <#Do low power stuff#> } else { <#Not in low power mode#> } }

doc
https://developer.apple.com/documentation/foundation/processinfo/1617047-islowpowermodeenabled

Swift3.0

if #available(iOS 9.0, *) { if ProcessInfo.processInfo().lowPowerModeEnabled { <#Do low power stuff#> } else { <#Not in low power mode#> } }

Swift2.2

if #available(iOS 9.0, *) { if NSProcessInfo.processInfo().lowPowerModeEnabled { <#Do low power stuff#> } else { <#Not in low power mode#> } }

是的,您可以添加观察者或直接查询。

6
投票

您可以使用以下方法获得电池电流模式... func isLowPowerMode() -> Bool{ ProcessInfo.processInfo.isLowPowerModeEnabled }


1
投票

NotificationCenter.default.addObserver(self, selector: #selector(powerStateChanged), name: Notification.Name.NSProcessInfoPowerStateDidChange, object: nil) @objc func powerStateChanged(_ notification: Notification) { let lowerPowerEnabled = ProcessInfo.processInfo.isLowPowerModeEnabled // take appropriate action }


U可以将下面的观察者与Uikit或Swiftui(无关紧要)

...

0
投票

...

...

 public class DevicePowerModeObserver: ObservableObject {
    
    @Published private(set) var devicePowerModeState: UIDevice.PowerModeState
    
    private var pipelines: Set<AnyCancellable> = []
 
    public init() {
        self.devicePowerModeState = UIDevice.PowerModeState(isLowPowerModeEnabled: ProcessInfo.processInfo.isLowPowerModeEnabled)
        initPipelines()
    }
    
    private static let powerStateDidChangeNotificationName = Notification.Name.NSProcessInfoPowerStateDidChange
    
    private func initPipelines() {
        NotificationCenter.default.publisher(for: Self.powerStateDidChangeNotificationName)
            .map { _ in
                UIDevice.PowerModeState(isLowPowerModeEnabled: ProcessInfo.processInfo.isLowPowerModeEnabled)
            }
            .receive(on: DispatchQueue.main)
            .assign(to: &$devicePowerModeState)
    }
}

...

实际2025年,在iOS 18,xcode16.2
中工作

struct PowerModeView: View { @State private var powerStatePublisher = NotificationCenter.default.publisher(for: Notification.Name.NSProcessInfoPowerStateDidChange) @State private var isLowPowerMode: Bool = false private var modeString: String { isLowPowerMode ? "On" : "Off" } var body: some View { VStack { Text("Low Power Mode: \(modeString)") .foregroundStyle(.white) .padding() .background(isLowPowerMode ? .red : .green) } .onReceive(powerStatePublisher.receive(on: DispatchQueue.main)) { _ in isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled } .onAppear { DispatchQueue.main.async { isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled } } } }


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.