top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
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だけれどもアプリが位置情報アクセスを禁止されていた場合のケースが抜けているからです。
そうではなく、単に利用可能かどうかだけ判定するのであれば、コンポーネントを活用して判定することが可能です。こちらのほうが抽象度が高く扱いやすいと考えます。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;
位置情報サービスの利用可否については、状況によってはアプリを再起動しないと状態が正しく反映されません。