我正在構建一個需要每分鐘輪詢一次服務器的Mac OSX應用程序,或者如果用戶希望的話更少。不幸的是,服務不支持推送......Mac - 獲取電池/充電狀態(插入或不插入)
不管怎麼說,我想提供兩個選項給用戶:
- 輪詢間隔上電池巡檢
- 間隔而充電
如何獲得目標C中充電器的狀態?只有在筆記本電腦插入或沒有插入時,我纔會真正關心實際的百分比。顯然,這對臺式機來說並不重要,所以希望有一種適用於筆記本電腦和臺式機的解決方案。
我正在構建一個需要每分鐘輪詢一次服務器的Mac OSX應用程序,或者如果用戶希望的話更少。不幸的是,服務不支持推送......Mac - 獲取電池/充電狀態(插入或不插入)
不管怎麼說,我想提供兩個選項給用戶:
如何獲得目標C中充電器的狀態?只有在筆記本電腦插入或沒有插入時,我纔會真正關心實際的百分比。顯然,這對臺式機來說並不重要,所以希望有一種適用於筆記本電腦和臺式機的解決方案。
查看IOPowerSources API。
首先撥打IOPSCopyPowerSourcesInfo()
,然後IOPSCopyPowerSourcesList()
獲取所有可用電源的列表。 IOPSGetPowerSourceDescription()
將返回包含關於特定電源信息的字典。根據文件,鑰匙kIOPSPowerSourceStateKey
描述「當前電源,kIOPSBatteryPowerValue
表示電源正在吸取內部電源; kIOPSACPowerValue
表示電源連接到外部電源。」
您還可以在電源變化時設置通知IOPSNotificationCreateRunLoopSource()
。
(注:我沒有測試過任何這,只是看着文檔)
雖然這個問題並已經有一個公認的答案,害得我到我的解決方案,這是痛苦通過大量的點擊和很多斷開的鏈接。
這裏是我的解決方案:
IOKit.framework
#import <IOKit/ps/IOPowerSources.h>
代碼:
CFTimeInterval timeRemaining = IOPSGetTimeRemainingEstimate();
if (timeRemaining == kIOPSTimeRemainingUnlimited) {
// connected to outlet
} else if (timeRemaining == kIOPSTimeRemainingUnknown){
// time remaining unknown (recently unplugged)
} else if ((timeRemaining/60) < 30){
// less than 30 minutes remaining
}
-2(充電器插頭)和-1充電器拔掉或它會給電池壽命的幾秒鐘 – 2015-08-04 09:44:39
這對我來說非常合適,而且更清晰。 – Volomike 2016-03-25 20:30:20
'IOPSCopyExternalPowerAdapterDetails()'似乎是一個更好的比賽:「如果沒有(交流/外接電源)適配器連接,或者如果有錯誤,返回'NULL'' – 2011-04-22 00:57:02
非常感謝! – 2011-04-24 00:34:43