top / index / prev / next / target / source

2016-03-10 diary: [Delphi] iOS: 位置情報サービスの ON/OFF 判定

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

[Delphi] iOS: 位置情報サービスの ON/OFF 判定

Delphi で iOS の位置情報サービスの ON/OFF 判定は、以下の通りです。

uses iOSapi.CoreLocation;
var
  Locater: CLLocationManager;
begin
  Locater := TCLLocationManager.Create;
  if Locater.locationServicesEnabled then
    ShowMessage('位置情報サービスは ON です')
  else
    ShowMessage('位置情報サービスは OFF です');
end;

※ただし、これだけだと不足がある。位置情報ONだけれどもアプリが位置情報アクセスを禁止されていた場合のケースが抜けているからです。

[Delphi] 位置情報サービスをコンポーネントを活用して ON/OFF 判定

そうではなく、単に利用可能かどうかだけ判定するのであれば、コンポーネントを活用して判定することが可能です。こちらのほうが抽象度が高く扱いやすいと考えます。OS種別も抽象化されているので 扱いやすいです。ただし一方でおおざっぱに状態を把握することになるので、メッセージなどの粒度もその分 粗くなります。

uses System.Sensors, System.Sensors.Components;
function GetLocationSensorAuthorized: TAuthorizationType;
var
  sensor: TLocationSensor;
begin
  sensor := TLocationSensor.Create(nil);
  try
    sensor.Active := True;
    if sensor.sensor = nil then
    begin
      // Treat no sensor as Unauthorized.
      Result := TAuthorizationType.atUnauthorized;
      Exit;
    end;
    Result := sensor.sensor.Authorized;
  finally
    FreeAndNil(sensor);
  end;
end;

これを利用する側のコードは以下の通り。

var
  Authorized: TAuthorizationType;
begin
  Authorized := GetLocationSensorAuthorized;
  case Authorized of
    TAuthorizationType.atNotSpecified:
      ShowMessage('位置情報サービスの状態が不明ですので、もう一度お試しください。');
    TAuthorizationType.atUnauthorized:
      ShowMessage('位置情報サービスが利用できません。');
    TAuthorizationType.atAuthorized:
      ShowMessage('位置情報サービスが利用可能です。');
  end;
end;

位置情報サービスの利用可否については、状況によってはアプリを再起動しないと状態が正しく反映されません。

登場キーワード


この日記について