Android 10 には、ルーティンに基づくバッテリー セーバーのスケジュール オプションが用意されています。このオプションを使用すると、よりインテリジェントなバッテリー セーバーのスケジューリングを行うための信号を、OEM が選択したアプリでシステムに提供できるようになります。このオプションは設定が必要です。実装を省略することもできます。
デバイス設定
プロバイダの仕様
デバイスが正しく構成されていることを設定 UI に通知するには、構成オーバーレイを使用して、アプリのパッケージ名で config_batterySaverScheduleProvider
の値をオーバーライドします。
たとえば、アプリのパッケージ com.google.android.apps.turbo
でルーティンに基づく設定をコントロールする場合は、次の構成値を設定します。
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
これでスマートフォンには、ルーティンに基づくというオプションが表示されるようになります。検証するには、イメージを作成してスマートフォンにフラッシュし、[設定] > [バッテリー] > [バッテリー セーバー] > [バッテリー セーバーのスケジュール] の順に移動します。ルーティンに基づくというオプションが表示されます。
オフにするデフォルトのしきい値
新しい config_dynamicPowerSavingsDefaultDisableThreshold
フィールドは、ルーティンに基づくスケジューラによってオンになった場合、システムがバッテリー セーバーをオフにするバッテリー レベルを表します。システム上のデフォルトは 80% ですが、値は変更することができます。
アプリの構成
権限
アプリがバッテリー セーバーをアプリからオンにするために必要な API は、権限 android.permission.POWER_SAVER
で保護されています。これは署名 / 特権の権限であるため、バッテリー セーバーの実行を許可するアプリに対して、privapp-whitelist
でこの権限を付与します。
アプリに privapp
権限を付与する場合の例:
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
この権限を事前にシステム イメージ上のアプリのバージョンに付与していない場合、アプリによる権限の取得あるいは API の適切な呼び出しができません。システムは通常の権限エラー以外のフィードバックを返さないため、API を呼び出せることとその効果を確認してください。
設置
オプションルーティンに基づくが適切に機能するようにするためには、必要な権限でシステム イメージにアプリをプリインストールする必要があります。1 つのアプリのみに POWER_SAVER
の権限を与え、ルーティンに基づく API を制御できるようにします。複数のアプリが権限および API を使用しようとした場合のこの機能の動作はサポートされておらず、また指定もされていません。
バッテリー セーバーの実行
API
以上の設定を適切に完了している場合、指定した OEM アプリで PowerManager 内の関連メソッドを正常に呼び出して、次のようにバッテリー セーバーを実行できます。
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
ルーティンに基づくバッテリー セーバーのスケジュール オプションが有効で、powerSaveHint
に対して true
の値でアプリがこのメソッドを呼び出すと、バッテリー セーバーがオンになります。アプリがシステムと通信できない場合にバッテリー セーバーをオフにしても安全な電池残量をシステムが認識できるように、disableThreshold
を指定します。
この API は、残量に基づく自動バッテリー セーバーと同じように、ユーザーによるオーバーライドとバッテリー セーバーのスヌーズの影響を受けます。詳しくは、API ドキュメントをご覧ください。
API が正常に呼び出されたことを確認するには、グローバル設定をクエリして、API 呼び出しにしたがってバッキング設定により値が変更したことを確認します。
たとえば、ユーザーがルーティン バッテリー セーバー モードを選択し、アプリが setDynamicPowerSaveHint(true, 10)
を呼び出している場合、全般設定の値は次のようになります。
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1
さらに、setDynamicPowerSaveHint(false, 25)
を呼び出した場合、値は次のようになります。
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0
この値は、次の adb
コマンドを使用して確認することができます。
adb shell settings get global <setting-name>
確認
通常のバッテリー セーバー モードを実行するタイミングを決める動作は OEM による構成内容によって異なるため、この機能を自動的に検証する方法はありません。したがって、OEM は構成内容についてテストを行い、動作が適切であることを確認する責任があります。具体的には、デバイスが次のタスクを実行できることを検証します。
- ユーザーが、バッテリー セーバーのスケジュール UI で残量に基づくを選択し、15% を選ぶ。バッテリー セーバーは、バッテリーが 15% になった場合にのみ自動的にオンになる。
- ユーザーが、バッテリー セーバーのスケジュール UI でルーティンに基づくを選択する。アプリが
true
で API を呼び出すと、バッテリー セーバーがオンになる。さらに、指定されたしきい値レベルまでデバイスの充電が完了した後に充電器から外すと、バッテリー セーバーが自動的にオフになる。 - ユーザーが、バッテリー セーバーのスケジュール UI でなしを選択する。バッテリー セーバーが自動的にオンにならない。
- バッテリー セーバーをアプリがオンに、ユーザーが(クイック設定や設定などを使用して)手動でオーバーライドしてオフにした場合、ユーザーが手動で再び電源を入れるかデバイスを充電器に接続するまでオフのままになる。