iPhone の電源状態を確認する : Objective-C プログラミング

PROGRAM


iPhone の電源状態を確認する

iPhone や iPad でバッテリーの状態を知るためのプロパティとして、iOS 3.0 以上の UIDevice には "batteryState" が用意されています。

このプロパティを参照することで、バッテリーが次のいずれの状態にあるかを知ることができます。

UIDeviceBatteryStateUnplugged バッテリー駆動中で、バッテリーへの電源供給がされていない状態です。
UIDeviceBatteryStateCharging コンセントによる電源供給中で、バッテリーへの充電中です。
UIDeviceBatteryStateFull コンセントによる電源供給中で、バッテリーは満充電されています。
UIDeviceBatteryStateUnknown バッテリーの状態が不明です。

これから、iPhone や iPad が電源コンセントに繋がれているかを判断して、プログラムの制御を行うことが可能です。

 

電源の状態変化を検出する

バッテリーへの電源供給がされているかどうかは、プログラム実行中にも、ユーザーが充電を始めたりドックから取り外したりすることによって変化します。

バッテリーの状態変化をリアルタイムで検出するには、UIDevice でバッテリー状態変化の通知を有効化して、それを通知センター経由で受け取るという流れになります。

 

まず、バッテリー状態の変化検出を有効化するには、次のようにします。

// デバイスのインスタンスを取得します。

UIDevice* device = [UIDevice currentDevice];

 

// バッテリーの状態変化の検出を有効化します。この操作はメインスレッドで実行する必要があるようです。

device.batteryMonitoringEnabled = YES;

これで、バッテリー状態が変化した場合に、通知センターによってそれが知らされるようになりました。

なお、別のスレッドでこの "batteryMonitoringEnabled" プロパティを設定しても、状態変化の通知が来ないことがありました。このプロパティの操作は必ず、メインスレッドで行う必要があるようなので注意が必要です。

 

通知センターからのバッテリー状態変化の通知は、次のようにして受け取ります。

// あらかじめ、バッテリー状態の変化通知が届いた時の処理を行うメソッドを準備しておきます。

- (void)deviceBatteryStateDidChangeNotification:(NSNotification*)note

{

}

// バッテリー状態が変化した通知の受け取りを有効化します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceBatteryStateDidChangeNotification:) name:UIDeviceBatteryStateDidChangeNotification object:nil];

これで、バッテリーの状態が変化した際に "deviceBatteryStateDidChangeNotification:" メソッドが呼び出されるようになりました。

ちなみに、通知を無効化したい場合には次のようにします。

// バッテリー状態の通知を受け取らないようにするには、次のようにします。

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceBatteryStateDidChangeNotification object:nil];

[ もどる ]