DelphiでiOSデバイスのバッテリ残量を取得する例はググるといくつか出て来るのですけど、分かる人が見れば分かるくらいのサラリとした内容が多いようで、比較的最近になってRAD Studioを使い始めた方が読むと案外難儀します。
そこでソースコードをまるごと載せてみることにしました。なお、キモになる部分(Button1Click) の内容は、やましょうさんのブログからいただきました。
このコードは、新規の「マルチデバイスアプリケーションプロジェクト」に対して、TMemoとTButtonを一つづつ配置すれば動作します。
ここから引用する場合の注意点は下記3点です。
- ビルドのターゲットプラットフォームは iOS 系にすること。
- uses に iOSapi.UIKit を追加すること。
- procedure TForm1.Button1Click() の内容はそのままコピペすること。
特に案外大事なのは、ビルドのターゲットプラットフォームです。これを先に変えておかないと、uses iOSapi.UIKit する時点でエラーが出まくりです。
Delphi の FireMonkey フレームワークでは、モバイルデバイスのバッテリ残量取得に対応したクラスが実装されていないのですが、そのような場合はネイティブのAPIを呼ぶことで値が取得できます。
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, iOSapi.UIKit, FMX.StdCtrls, FMX.Layouts; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { private 錾 } public { public 錾 } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); var device : UIDevice; begin device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice); Device.setBatteryMonitoringEnabled( True ); Memo1.Lines.Insert(0,floattostr(Device.batteryLevel * 100)); Device.setBatteryMonitoringEnabled( false ); end; end.