「.NET for Androidでバッテリー残量を取得する」の版間の差分
Administrator (トーク | 投稿記録) ページの作成:「 ; 環境 * .NET 8 for Android ; 概要 バッテリーの状態変化を監視するRegisterReceiver関数のreceiver引数をnullにすると現在値が取得できます。 ; コード <source lang="csharp"> readonly IntentFilter filter = new IntentFilter(Intent.ActionBatteryChanged); int GetBatteryLevel(Context context) { // receiverをnullにするとバッテリ状態を単発で習得できます。 var intent = context.RegisterReceiver(receiver…」 |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の1版が非表示) | |||
| 1行目: | 1行目: | ||
== 環境 == | |||
* .NET 8 for Android | * .NET 8 for Android | ||
== 単発で取得する == | |||
バッテリーの状態変化を監視するRegisterReceiver関数のreceiver引数をnullにすると現在値が取得できます。 | バッテリーの状態変化を監視するRegisterReceiver関数のreceiver引数をnullにすると現在値が取得できます。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
readonly IntentFilter filter = new IntentFilter(Intent.ActionBatteryChanged); | readonly IntentFilter filter = new IntentFilter(Intent.ActionBatteryChanged); | ||
| 30行目: | 29行目: | ||
} | } | ||
</source> | </source> | ||
== 状態変化を監視する == | |||
バッテリの状態変化を監視するにはRegisterReceiver関数のreceiver引数にBroadcastReceiverクラスの継承クラスを指定する。 | |||
<source lang="csharp"> | |||
public class BatteryTracker : BroadcastReceiver | |||
{ | |||
readonly IntentFilter _filter = new IntentFilter(Intent.ActionBatteryChanged); | |||
Context _context; | |||
public Action<Intent>? OnBatteryChangedAction; | |||
public BatteryTracker(Context context) | |||
{ | |||
_context = context; | |||
} | |||
public void Start() | |||
{ | |||
// receiverをnullにするとバッテリ状態を単発で習得できます。 | |||
_context.RegisterReceiver(receiver: this, filter: filter); | |||
} | |||
public void Stop() | |||
{ | |||
_context.UnregisterReceiver(this); | |||
} | |||
public override void OnReceive(Context? context, Intent? intent) | |||
{ | |||
if (intent != null && intent.Action == Intent.ActionBatteryChanged) | |||
{ | |||
OnBatteryChangedAction?.Invoke(intent); | |||
} | |||
} | |||
} | |||
</source> | |||
ググるとJavaやKotlinの実装例がよく出てくるやつだが、C#の場合はAndroidで定番のReceiverだのCallbackだのは、継承クラスには処理を書かずに、盲目的にActionに変換した方が扱いやすい。 | |||
<source lang=csharp> | |||
var batteryTracker = new BatteryTracker(this); | |||
batteryTracker.OnBatteryChangedAction = (intent) => { | |||
var level = intent.GetIntExtra(BatteryManager.ExtraLevel, -1), | |||
var scale = intent.GetIntExtra(BatteryManager.ExtraScale, -1), | |||
}; | |||
batteryTracker.Start(); | |||
</source> | |||
[[category: .NET for Android]] | [[category: .NET for Android]] | ||