2013-12-14 125 views
13

我在OS X應用程序中使用MobileDevice.framework和我已經能夠得到怎樣充電連接在USBiOS設備的電池使用AMDeviceCopyValue(device, domain, key)功能與參數"com.apple.mobile.battery"domain"BatteryCurrentCapacity"key如何從連接的iOS設備獲取電池充電週期?

我也想得到電池充電週期的數量。我相信這是可能的,因爲iBackupBot能夠獲取該數據。有誰知道它是如何做到這一點?我下載了該程序的免費副本,並在iPhone 3GSiPhone 4SiPhone 5上進行了測試。它能夠獲取所有三種設備的數據。

我已經通過LLDB運行iBackupBot並記錄了它的每種用法AMDeviceCopyValue()。在這樣做的時候,我確定它沒有從中獲得充電週期數。

+0

我授予賞金,因爲我不想看到它浪費(當然,他給了我很多我不知道的相關信息),但它並沒有真正回答這個問題,所以我離開這個沒有被接受的答案,直到有人給出了答案。我計劃在稍後有更多時間攻擊iBackupBot(已經這樣做的應用程序)和Hopper Decompiler ...我會在找到它時發佈解決方案,如果有人在我之前沒有拿出它。 – ArtOfWarfare

+0

嗨,我想在iPhone中得到這個更新嗎?謝謝。 – flypig

+0

@flypig - 如果你可以使用私有框架,請查看我給予獎勵的答案。如果沒有,我懷疑你可以在iOS上做到這一點。 – ArtOfWarfare

回答

3

我想你說的是獲得設備的電池狀態,啓用後的UIDevice的batteryMonitoringEnabled對象,你可以得到當前狀態和電池的水平,

一樣,

UIDevice *device = [UIDevice currentDevice]; 
device.batteryMonitoringEnabled = YES; 
NSLog(@"State: %i Charge: %f", device.batteryState, device.batteryLevel); 

有不同UIDeviceBatteryState從你設備能得到

  • UIDeviceBatteryStateUnplugged的
  • UIDeviceBatteryStateCharging,
  • UIDeviceBatteryStateFull,
+0

1 - 我需要電池的充電次數。也就是說,自從電池首次裝入設備後,電池從充滿狀態變爲空閒狀態多少次。在知道電池壽命將持續多久之前,這是一個很好的指標。 2 - 我想在連接到iOS設備的計算機上運行的應用程序中訪問此號碼,而不是在iOS設備上運行的應用程序中訪問此號碼。老實說,在本週結束時,如果任何人都可以告訴我如何通過設備上的應用程序獲得充電週期,即使它需要越獄,我可能會解決。 – ArtOfWarfare

+0

@ArtOfWarfare,你現在找到了解決方案嗎,我也想做同樣的事情 – jimwan

+0

@jimwan - 對不起,沒有。我在2014年初放棄了這一點。 – ArtOfWarfare

16

可以抓取CycleCount和一堆使用該設備的ioreg(IORegistry)轉儲其他信息。例如,請參閱here瞭解iPhone 5S的IORegistry轉儲。注意:此部分:

+-o AppleD2045PMUPowerSource <class AppleD2045PMUPowerSource, busy 0, retain count 10> 
    | | | | | { 
    | | | | |  "battery-data" = { 
          ..... 
          "CycleCount" = 1 
     | | | | |  "ChargerConfiguration" = 960 
     | | | | |  "DesignCapacity" = 1550 
     | | | | |  "BatteryData" = {"BatterySerialNumber"="C0133237ALXFHCWBP","ChemID"=4484,"Flags"=256,"QmaxCell0"=1619,"Voltage"=4051,"CycleCount"=1,"StateOfCharge"=72,"DesignCapacity"=1550,"FullAvailableCapacity"=1573,"MaxCapacity"=1517,"MfgData"=<4330313333323337414c58464843574250000000000000010000010000000100>,"ManufactureDate"="1332"} 
     | | | | |  "AtCriticalLevel" = No 

iOS上的私人IOKit.framework具有訪問所有這些信息的API(你可以看看轉儲找出屬性名稱等,以便能夠以編程方式訪問)。 Erica Sadun有一些open source code,它使用私有IOKit函數來訪問一些設備硬件信息(沒有越獄,IIRC),所以這可能會有所幫助。

至於從Mac獲取此信息,不知道。如果你有一個在線設備的應用程序,可以從IORegistry中獲取信息,並通過USB將它發送到Mac上。如果您想在沒有在設備上安裝任何其他軟件的情況下執行此操作,則必須找出遠程獲取ioreg轉儲的方法。

希望這會讓你得到一個地方!

+0

這段代碼看起來與我見過的用於獲取MacBook電池充電週期的代碼基本相同。現在我會爲此+1,如果在一週內沒有什麼更好的,我會給你賞金,但我更喜歡一些我可以在Mac上運行的代碼來獲取數據。也許這些信息存儲在iOS設備上的文件中,例如,我可以將它拉出來?我想象越獄社區中的某個人必須知道iOS隱藏文件目錄中的各種東西...... – ArtOfWarfare

+0

從Apple關於IOKit OS X版本的文檔:「I/O Kit的動態部分,註冊表不存儲在磁盤上或在引導之間歸檔,而是在每次系統引導時生成並駐留在內存中。「 (來源:https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/TheRegistry/TheRegistry.html#//apple_ref/doc/uid/TP0000014-TP9) – ArtOfWarfare

+0

對,所以它聽起來像一種方法可以在不安裝其他軟件的情況下從Mac獲取該文件,方法是找到一種方法來遠程調用設備上的ioreg來生成註冊表轉儲。 SSH是一種方式,但這需要越獄。 – indragie