位置情報サービスをコンポーネントを活用して 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;

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