2013-12-14 10 views
13

Sto usando MobileDevice.framework in un'applicazione OS X e sono stato in grado di ottenere quanto caricato la batteria di un dispositivo collegato iOS oltre USB sta usando la funzione AMDeviceCopyValue(device, domain, key) con gli argomenti "com.apple.mobile.battery" per la domain e "BatteryCurrentCapacity" per il key.Come si ottengono i cicli di carica della batteria da un dispositivo iOS collegato?

Desidero anche ottenere il numero di cicli di ricarica sulla batteria. Credo che sia possibile perché iBackupBot è in grado di recuperare quei dati. Qualcuno sa come funziona? Ho scaricato la copia gratuita del programma e l'ho provata su uno iPhone 3GS, iPhone 4S e uno iPhone 5. È stato in grado di prendere i dati per tutti e tre i dispositivi.

Ho eseguito iBackupBot tramite LLDB e registrato ogni suo utilizzo di AMDeviceCopyValue(). In tal modo, ho determinato che non sta ottenendo il conteggio dei cicli di carica da quello.

+0

Ho assegnato la taglia perché non volevo vederla andare sprecata (e certamente mi ha fornito molte informazioni rilevanti di cui non ero a conoscenza), ma in realtà non risponde alla domanda, quindi lascerò questo senza una risposta accettata finché qualcuno non lo darà. Sto pianificando di attaccare iBackupBot (l'applicazione che già lo fa) con Hopper Decompiler più tardi quando avrò più tempo ... pubblicherò la soluzione qui quando la trovo, se qualcuno non la presenta prima di me . – ArtOfWarfare

+0

Ciao, voglio ottenere questo in iPhone, qualsiasi aggiornamento? Grazie. – flypig

+0

@flypig - Se stai bene con l'utilizzo di framework privati, controlla la risposta a cui ho assegnato il premio. In caso contrario, dubito che tu possa farlo su iOS. – ArtOfWarfare

risposta

3

Credo che si sta parlando per ottenere lo stato dei dispositivi della batteria, Dopo permesso batteryMonitoringEnabled di UIDevice oggetto è possibile ottenere lo stato attuale e il livello della batteria,

Come,

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

C'è diverso UIDeviceBatteryState del dispositivo da voi può ottenere

  • UIDeviceBatteryStateUnplugged,
  • UIDeviceBatteryStateCharging,
  • UIDeviceBatteryStateFull,
+0

1 - Voglio il numero di cicli di ricarica sulla batteria. Ovvero, quante volte la batteria è passata da piena a vuota e viceversa da quando la batteria è stata inserita per la prima volta nel dispositivo. È una buona metrica per sapere quanto tempo ancora durerà fino a quando la batteria non morirà in modo permanente. 2 - Voglio accedere a questo numero in un'app in esecuzione su un computer connesso a un dispositivo iOS, non su un'app in esecuzione sul dispositivo iOS stesso. Onestamente, alla fine della settimana, probabilmente mi accontento se qualcuno può dirmi come ottenere i cicli di ricarica con un'app sul dispositivo, anche se richiede il jailbreak. – ArtOfWarfare

+0

@ArtOfWarfare, hai trovato la soluzione ora, voglio anche fare la stessa cosa – jimwan

+0

@jimwan - Scusa, no. Ho rinunciato a questo all'inizio del 2014. – ArtOfWarfare

16

È possibile prendere CycleCount e un mucchio di altre informazioni utilizzando un ioreg (IORegistry) dump del dispositivo. Ad esempio, vedi here per un dump di IORegistry di iPhone 5S. Nota questa sezione:

+-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 

Il privato IOKit.framework su iOS ha un API per accedere a tutte queste informazioni (si può guardare alla discarica di capire i nomi delle proprietà, ecc, al fine di essere in grado di accedervi programatically). Erica Sadun ha qualche open source code che usa le funzioni private di IOKit per accedere ad alcune informazioni sull'hardware del dispositivo (senza un jailbreak, IIRC), quindi forse sarà utile.

Per quanto riguarda l'acquisizione di queste informazioni da un Mac, nessuna idea. Se disponi di un'app per dispositivi in ​​grado di estrarre le informazioni da IORegistry e inviarle al Mac tramite USB, ciò potrebbe funzionare. Se si volesse farlo senza avere alcun software aggiuntivo installato sul dispositivo, si dovrebbe trovare un modo per ottenere in remoto un dump ioreg.

Spero che questo ti porti da qualche parte!

+0

Questo codice sembra sostanzialmente identico al codice che ho visto per scaricare i cicli di carica di una batteria del MacBook. Per ora faccio +1, e se non succede niente di meglio tra una settimana, ti darò la taglia, ma preferirei un codice che possa essere eseguito su Mac per ottenere i dati. Forse l'informazione è memorizzata in un file sul dispositivo iOS che posso tirare, per esempio? Immagino che qualcuno nella comunità del jailbreak debba conoscere tutti i tipi di cose nelle directory dei file nascosti di iOS ... – ArtOfWarfare

+0

Dalla documentazione Apple sulla versione OS X di IOKit: "Una parte dinamica del kit I/O, il registro non è memorizzato su disco o archiviati tra gli stivali, ma è stato creato ad ogni avvio del sistema e risiede in memoria. " (Fonte: https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/TheRegistry/TheRegistry.html#//apple_ref/doc/uid/TP0000014-TP9) – ArtOfWarfare

+0

Giusto, quindi suona come un modo per ottenere ciò da un Mac senza installare software aggiuntivo sarebbe quello di trovare un modo per richiamare 'ioreg' sul dispositivo in remoto per produrre un dump del Registro di sistema. SSH è unidirezionale, ma richiede un jailbreak. – indragie

Problemi correlati