位置情報サービスをコンポーネントを活用して 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;
位置情報サービスの利用可否については、状況によってはアプリを再起動しないと状態が正しく反映されません。