woshidan's loose leaf

ぼんやり勉強しています

電池消費量の最適化を読んだ

http://developer.android.com/intl/ja/training/monitoring-device-state/index.html

を読んだ雑な感想

開発するアプリの中でホスト端末の状態を監視し、それに基づいて機能や動作を変更することができるようになります

  • 接続が失われたときはバックグラウンド サービスの更新を停止
  • 電池残量が低下したときは更新の頻度を下げる

電池残量と充電状態の監視

http://developer.android.com/intl/ja/training/monitoring-device-state/battery-monitoring.html#DetermineChargeState

  • 充電時は常に最大出力でok
  • 電池駆動 => 更新頻度を下げる

現在の充電状態を特定する

  • 現在の充電状態を特定
    • var ifilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter)
    • バッテリー状態のIntentはsticky IntentなのでBroadcastReceiverいらない
    • int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1)...
      • 充電中か等も調べられる

充電状態の変化を監視する

  • 下記のactionを受け付けるintent_filterを持つreceiverの宣言をManifestに書きます
    • action android:name="android.intent.action.ACTION_POWER_CONNECTED", action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"
  • 上記のbroascastReceiverでIntentから充電状態を抽出します

現在の電池残量を特定する / 電池残量の大きな変化を監視する

  • 現在の電池残量を特定する => できるよ、ただ継続的に監視すると監視する方が電池食うよ
  • 電池残量の大きな変化のみを監視できるよ
    • LOWとかOKAYとかついているactionだよ
  • 端末の充電という動作が開始するのは、端末がホルダーにセットされるのと同時
    • 現在のホルダーの状態を特定し、端末のホルダー装着状態の変化を監視する

ホルダーの装着状態とタイプの特定と監視

  • 車載用や家庭用のホルダー
    • デジタル/アナログ
    • だが主に電力供給されるよね
      • ホルダーの種類を見て、アプリが利用されているタイミングと合わせて動作状態を設定できたらいいね
        • cf. スポーツセンター アプリなら、卓上ホルダー装着時には更新頻度を上げ、カー ホルダー装着時には更新を完全に停止する
    • ホルダー装着状態もsticky Intent
  • ホルダーのタイプは4つで
    • カー/卓上/ローエンド卓上/ハイエンド卓上

接続状態の特定と監視

  • インターネット接続の有無
    • ConnectivityManager
  • インターネット接続のタイプを特定する
    • モバイル データ接続は重い傾向があるので、Wifiを松等
  • 接続状態の変化を監視する => "android.net.conn.CONNECTIVITY_CHANGE" のintent filter

オンデマンドでのブロードキャスト レシーバ操作

  • 梅: 監視対象の状態ごとにBroadcastReceiverを作成する
  • 竹: 実行時にブロードキャスト レシーバをオンまたはオフにするというもの
    • => PackageManager

感想

  • 電池残量と充電状態の監視は実際ユーザーとして実感がある感じだった
  • インターネット接続はいま有無くらいしか対応できてないな
  • とにかくシステム情報はIntentで飛んでくるのでBroadcastReceiverでキャッチする