4

簡単な質問があります。iPhoneのバッテリー残量を取得するにはどうすればよいですか?

[UIDevice currentDevice] batteryLevel]

簡単ですか?ただし、少し問題があります。 UIKitを使用できません。ここに私がこれまでに書いたものがありますが、うまくいかないと思います:

    // notification port
IONotificationPortRef nport = IONotificationPortCreate(kIOMasterPortDefault);

CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(nport), kCFRunLoopDefaultMode);

CFMutableDictionaryRef matching = IOServiceMatching("IOPMPowerSource");

kern_return_t kr = IOServiceAddMatchingNotification(nport, kIOFirstMatchNotification, matching, (IOServiceMatchingCallback)power, self, &powerIterator);

NSLog(@"Kernel said %d",kr);

power((void*)nport,powerIterator);

バッテリーレベルを取得するには、 IOKitに頼る必要があると確信しています。私のアプリケーションは、UIKit を使用できない低レベルのアプリケーションであるため、UIKit を使用しません。私が使用しているフレームワークは次のとおりです。

代替テキスト http://img837.imageshack.us/img837/1829/screenshot20100718at211.png

4

3 に答える 3

8

しばらく前に、ioreg に似た iox というプログラムを作成しましたが、IOKit 呼び出しに簡単に変換できる点が異なります。ラップトップでそれを実行すると、次のようにバッテリー レベルが表示されます。

AppleSmartBattery - IOService:/AppleACPIPlatformExpert/SMB0/AppleECSMBusController/AppleSmartBatteryManager/AppleSmartBattery
        CurrentCapacity = 11678
        FullyCharged = YES
        DesignCapacity = 13000
        MaxCapacity = 11910
        ...

コードでは、つまり

IOServiceNameMatching( "AppleSmartBattery" );

名前が iOS で同じになるかどうかはわかりませんが、iPhone で実行できる ioreg のようなプログラムを見つけるか、同等のものをログに記録する簡単なものを作成してみます。

ioreg は IOKitTools の一部であり iPhone でコンパイルする必要があります。

編集:

CFMutableDictionaryRef matching , properties = NULL;
io_registry_entry_t entry = 0;
matching = IOServiceMatching( "IOPMPowerSource" );
//matching = IOServiceNameMatching( "AppleSmartBattery" );
entry = IOServiceGetMatchingService( kIOMasterPortDefault , matching );
IORegistryEntryCreateCFProperties( entry , &properties , NULL , 0 );
NSLog( @"%@" , properties );
CFRelease( properties );
IOObjectRelease( entry );

いくつかの安全チェックを追加します。必要な特定のプロパティを見つけたら、IORegistryEntryCreateCFProperties を使用して一度にすべてを取得する代わりに、それらを直接取得できます。

IOKit はすべてを大きなツリーとして表します。IOPMPowerSource は、必要な属性を直接持っていない可能性があります。その場合、子を反復処理する必要があります。ioreg のようなものを使用すると、コーディングを開始する前に何を探しているかがわかります。

于 2010-07-18T20:29:07.473 に答える
2

脱獄開発の経験はありませんが、このガイドは役立つかもしれません。

于 2010-07-18T20:54:09.573 に答える
0

私は大きなものに行くつもりです:なぜですか?

ご存知かもしれませんが、iPhoneでUIKitを実際に使用することはできないので、何をしているのかよくわかりません。

于 2010-07-18T19:58:07.867 に答える