2013-12-14 66 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