- 元の記事 : Detecting low power mode
- 元の記事の著者 : useyourloaf
- 翻訳元 : 掘金翻訳計画
- 翻訳者 : Zheaoli
- 校正者 : LoneyIsError, wild-flame
今週、私は Uber がスマートフォンの省電力モードをどのように検出しているかについての記事を読みました。(注:記事のリンクはUber found people more likely to payです)スマートフォンのバッテリーが残り少なくなると、Uber を利用すると料金が高くなる可能性があります。Uber はこのデータを利用して料金を設定していないと主張していますが、ここで私が知りたいのは、ユーザーの iPhone が低電力モードになっているかどうかをどのように知るのかということです。
低電力モード#
iOS 9 では、iPhone に低電力モードが追加されました。充電するまでの間、低電力モードはメールの送受信、Siri、バックグラウンドでのプッシュ通知などの電力消費機能を停止してバッテリーの使用時間を延ばします。
重要な点は、低電力モードはユーザーが自分で設定する必要があるということです。バッテリーの設定で低電力モードをオンにする必要があります。低電力モードに入ると、ステータスバーのバッテリーアイコンが黄色に変わります。
充電が 80%以上になると、システムは自動的に低電力モードをオフにします。
低電力モードの検出#
実際には、iOS 9 で低電力モードの情報を取得するのは非常に簡単です。ユーザーが低電力モードに入っているかどうかを判断するには、NSProcessInfoクラスを使用できます:
if NSProcessInfo.processInfo().lowPowerModeEnabled {
// バッテリー消費の激しい処理を停止する
}
Objective-C で同じ機能を実装する場合は、次のようになります:
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled]) {
// バッテリー消費の激しい処理を停止する
}
NSProcessInfoPowerStateDidChangeNotification通知を監視している場合、ユーザーが低電力モードに切り替えたときにメッセージを受け取ることができます。たとえば、ビューコントローラーのviewDidLoadメソッド内で次のようにします:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: #selector(didChangePowerMode(_:)),
name: NSProcessInfoPowerStateDidChangeNotification,
object: nil)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didChangePowerMode:)
name:NSProcessInfoPowerStateDidChangeNotification
object:nil];
このメソッドでは、電力モードを監視し、切り替え時に応答します。
func didChangePowerMode(notification: NSNotification) {
if NSProcessInfo.processInfo().lowPowerModeEnabled {
// 低電力モードがオンになっている
} else {
// 低電力モードがオフになっている
}
}
- (void)didChangePowerMode:(NSNotification *)notification {
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled]) {
// 低電力モードがオンになっている
} else {
// 低電力モードがオフになっている
}
}
ヒント:
-
この通知メソッドと NSProcessInfo のプロパティは、iOS 9 以降で提供される新しいメソッドです。アプリを iOS 8 またはそれ以前のバージョンと互換性があるようにする場合は、test for availabilityサイトでコードが正常に動作するかどうかをテストする必要があります。
-
低電力モードは iPhone の特徴であり、iPad で上記のコードをテストすると常に false が返されます。
ユーザーが低電力モードを有効にしている場合にのみ、アプリがバッテリー寿命を延ばすための省電力対策を実施できるようになります。Apple は以下のような提案をしています:
- 位置情報の更新を停止する
- ユーザーインタラクションのアニメーションを減らす
- バックグラウンドでのデータストリームなどの操作を停止する
- エフェクトを無効にする