バッテリ

Browse sample. サンプルを参照する

この記事では、.NET マルチプラットフォーム アプリ UI (.NET MAUI) IBattery インターフェイスを使用して、デバイスのバッテリ情報を確認し、変化を監視する方法について説明します。 このインターフェイスは、デバイスの省電力状態に関する情報も提供します。これは、デバイスが低電力モードで動作しているかどうかを示すものです。

IBattery インターフェイスの既定の実装は、Battery.Default プロパティを通じて利用できます。 IBattery インターフェイスと Battery クラスは、どちらも Microsoft.Maui.Devices 名前空間に含まれています。

作業の開始

バッテリ機能にアクセスするには、次のプラットフォーム固有の設定が必要です。

BatteryStats アクセス許可が必要です。Android プロジェクト内で構成する必要があります。 次の方法でアクセス許可を設定できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次の行を追加します。

    <uses-permission android:name="android.permission.BATTERY_STATS" />
    

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、BATTERY_STATS のアクセス許可を確認します。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

バッテリの状態を確認する

バッテリの状態は、IBattery インターフェイスの既定の実装である Battery.Default プロパティにアクセスすることで確認できます。 このインターフェースは、バッテリの残量を読み取る ChargeLevel など、バッテリの状態に関する情報を提供するさまざまなプロパティを定義します。 ChargeLevel プロパティは、0.0 から 1.0 までの値を返し、それぞれバッテリの充電レベルが空からフルまでを示します。

BatteryInfoChanged イベントも利用可能で、バッテリの状態が変化したときに発生します。 次の例は、BatteryInfoChanged イベントを監視し、バッテリの状態を Label コントロールに報告する方法を示しています。

private void BatterySwitch_Toggled(object sender, ToggledEventArgs e) =>
    WatchBattery();

private bool _isBatteryWatched;

private void WatchBattery()
{
    
    if (!_isBatteryWatched)
    {
        Battery.Default.BatteryInfoChanged += Battery_BatteryInfoChanged;
    }
    else
    {
        Battery.Default.BatteryInfoChanged -= Battery_BatteryInfoChanged;
    }

    _isBatteryWatched = !_isBatteryWatched;
}

private void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
{
    BatteryStateLabel.Text = e.State switch
    {
        BatteryState.Charging => "Battery is currently charging",
        BatteryState.Discharging => "Charger is not connected and the battery is discharging",
        BatteryState.Full => "Battery is full",
        BatteryState.NotCharging => "The battery isn't charging.",
        BatteryState.NotPresent => "Battery is not available.",
        BatteryState.Unknown => "Battery is unknown",
        _ => "Battery is unknown"
    };
    
    BatteryLevelLabel.Text = $"Battery is {e.ChargeLevel * 100}% charged.";
}

低電力省エネモード

バッテリで動作するデバイスは、低電力の省電力モードに切り替えることができます。 バッテリ残量が 20% を下回ったときなど、デバイスが自動的にこのモードに切り替わる場合があります。 オペレーティング システムは、バッテリを消耗させる傾向があるアクティビティを減らすことで、省電力モードに対応します。 アプリケーションでは、バックグラウンド処理やその他の電力消費の大きいアクティビティを回避することで、省電力モードがオンになった場合をサポートできます。

重要

デバイスの省電力状態がオンになっている場合、アプリケーションはバックグラウンド処理を避ける必要があります。

デバイスの省エネ状態は、EnergySaverStatus プロパティ (OnOff、または Unknown) にアクセスすることで読み取ることができます。 状態が On の場合、アプリケーションでは、バックグラウンド処理や電力消費の大きいその他のアクティビティを避ける必要があります。

バッテリが省エネ モードに入るとき、または省エネ モードから出るときに、バッテリは EnergySaverStatusChanged イベントを発生させます。 EnergySaverStatus プロパティを使用して、デバイスの現在の省エネ状態を取得することもできます。

次のコード例では、省エネ状態を監視し、それに応じてプロパティを設定します。

private bool _isBatteryLow = false;

private void BatterySaverSwitch_Toggled(object sender, ToggledEventArgs e)
{
    // Capture the initial state of the battery
    _isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
    BatterySaverLabel.Text = _isBatteryLow.ToString();

    // Watch for any changes to the battery saver mode
    Battery.Default.EnergySaverStatusChanged += Battery_EnergySaverStatusChanged;
}

private void Battery_EnergySaverStatusChanged(object sender, EnergySaverStatusChangedEventArgs e)
{
    // Update the variable based on the state
    _isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
    BatterySaverLabel.Text = _isBatteryLow.ToString();
}

電源

PowerSource プロパティは、デバイスが充電されている場合、その方法を示す BatteryPowerSource 列挙を返します。 充電されていない場合、ステータスは BatteryPowerSource.Battery です。 BatteryPowerSource.ACBatteryPowerSource.UsbBatteryPowerSource.Wireless の値は、バッテリが充電されていることを示します。

次のコード例では、電源に基づいて Label コントロールのテキストを設定します。

private void SetChargeModeLabel()
{
    BatteryPowerSourceLabel.Text = Battery.Default.PowerSource switch
    {
        BatteryPowerSource.Wireless => "Wireless charging",
        BatteryPowerSource.Usb => "USB cable charging",
        BatteryPowerSource.AC => "Device is plugged in to a power source",
        BatteryPowerSource.Battery => "Device isn't charging",
        _ => "Unknown"
    };
}

プラットフォームによる違い

このセクションでは、バッテリとのプラットフォーム固有の違いについて説明します。

プラットフォームによる違いはありません。