pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


DelphiでiOSデバイスのバッテリ残量を取得する

DelphiiOSバイスのバッテリ残量を取得する例はググるといくつか出て来るのですけど、分かる人が見れば分かるくらいのサラリとした内容が多いようで、比較的最近になって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.