С выходом iOS 14 Apple отделила уровень точности от статуса авторизации местоположения, что создало определенные сложности для разработчиков, использующих Delphi FMX для создания приложений под iOS. В этой статье мы рассмотрим проблему доступа к точному местоположению в iOS 14 и предложим решение, а также альтернативный подход.
Проблема
До iOS 14 определение уровня точности местоположения было простым: достаточно было проверить значение свойства accuracyAuthorization объекта CLLocationManager. Однако с выходом iOS 14 это свойство стало недоступным из кода пользователя, что усложнило проверку уровня точности для приложений, созданных с помощью Delphi FMX.
Решение Dave Nottage
Dave Nottage предложил решение, которое заключается в создании экземпляра CLLocationManager и проверке значения свойства accuracyAuthorization. Если уровень точности равен CLAccuracyAuthorizationReducedAccuracy, а вашему приложению требуется высокая точность, информируйте пользователя о необходимости изменить настройки местоположения вручную.
Вот пример кода на Object Pascal (Delphi), демонстрирующий это решение:
uses
iOSapi.CoreLocation;
procedure TForm1.Button1Click(Sender: TObject);
var
LManager: CLLocationManager;
begin
LManager := TCLLocationManager.Create;
if LManager.accuracyAuthorization = CLAccuracyAuthorizationReducedAccuracy then
// Информируйте пользователя о необходимости изменить настройки местоположения
end;
Альтернативное решение
Хотя решение Dave Nottage работает отлично, оно требует создания экземпляра CLLocationManager и проверки его свойства. В качестве альтернативы можно использовать событие OnAuthorizedStatusChanged компонента TLocationSensor, который уже предоставляет информацию об уровне точности.
Вот пример кода на Object Pascal (Delphi), демонстрирующий это альтернативное решение:
procedure TForm1.TLocationSensor1AuthorizedStatusChanged(Sender: TObject);
begin
if TLocationSensor(Sender).Accuracy = TLocationAccuracy.Unknown then
// Информируйте пользователя о необходимости изменить настройки местоположения
end;
В этом примере мы проверяем значение свойства Accuracy компонента TLocationSensor. Если оно равно Unknown, это означает, что приложению разрешено использовать только приблизительное местоположение. В этом случае информируйте пользователя о необходимости изменить настройки местоположения вручную.
Вывод
В этой статье мы рассмотрели проблему доступа к точному местоположению в iOS 14 для приложений Delphi FMX и предложили два решения: первое основано на подходе Dave Nottage, а второе использует альтернативный подход с компонентом TLocationSensor. Оба решения позволят вам информировать пользователей о необходимости изменить настройки местоположения, если приложению разрешено использовать только приблизительное местоположение.
Надеемся, что Embarcadero добавит соответствующее свойство или функцию в компонент TLocationSensor, чтобы упростить работу с уровнями точности местоположения в будущих версиях Delphi.
Статья описывает проблемы доступа к точному местоположению в iOS 14 для приложений, созданных с помощью Delphi FMX, и предлагает два решения для информирования пользователей о необходимости изменить настройки местоположения вручную, если приложению разреш
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS