Как правильно запрашивать разрешения на определение местоположения для фоновых обновлений местоположения во Flutter?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно запрашивать разрешения на определение местоположения для фоновых обновлений местоположения во Flutter?

Сообщение Anonymous »


Я работаю над приложением Flutter, которому необходимо получать данные о местоположении в фоновом режиме как для iOS, так и для Android. Я обновил свои info.plist и AndroidManifest.xml с необходимыми разрешениями и включил геолокатор и workmanager пакеты. Однако я не уверен, правильно ли я настроил фоновую загрузку для обеих платформ.

Вот как я настроил свой info.plist:

NSLocationAlwaysAndWhenInUseUsageDescription Информация о местоположении необходима для проверки географических координат при отправке случайной посещаемости NSLocationWhenInUseUsageDescription Информация о местоположении необходима для проверки географических координат при отправке информации о посещаемости UIBackgroundModes выбрать местоположение обработка И для Android в AndroidManifest.xml:

Я также включил пакеты геолокатора и менеджера работ в свой pubspec.yml:

геолокатор: ^11.0.0 руководитель работ: ^0.5.2 Вот фрагмент кода Dart, с которым я работаю в main.dart. Я пытаюсь инициализировать фоновую задачу для получения обновлений о местоположении, но не уверен, правильно ли я ее настроил. Может ли кто-нибудь проверить, правильно ли реализована инициализация моей задачи и обработка обратного вызова для Flutter?
import 'dart:async'; импортировать «пакет: флаттер/материал.dart»; импортировать «пакет: flutter/services.dart»; импортировать «пакет: smartrac_blue_dart/splashscreen/splashscreen.dart»; импортировать «пакет: workmanager/workmanager.dart»; импортировать «пакет: smartrac_blue_dart/database/bluedart_db.dart»; импортировать 'locationService/locationService.dart'; // Имя задачи Workmanager const fetchLocationTask = "fetchLocationTask"; недействительный callbackDispatcher() { печать('Диспетчер обратного вызова'); Workmanager().executeTask((task, inputData) async { если (задача == fetchLocationTask) { ждут LocationService().fetchAndStoreLocation(); // Вызов статического метода для фонового выполнения } вернуть Future.value(истина); }); } void main() асинхронный { ВиджетыFlutterBinding.ensureInitialized(); // Убедитесь, что Flutter инициализирован дождитесь Workmanager().initialize(callbackDispatcher); // Регистрируем периодическую задачу вар uniqueID = «uniqueLocationTask»; // Рекомендуется использовать более статический идентификатор Workmanager().registerPeriodicTask( уникальный идентификатор, выборкаLocationTask, частота: Продолжительность (минут: 2), // Скорректирована на более разумный и совместимый с платформой интервал. ); SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]).затем((_) { запуститьApp(MyApp()); }); } класс MyApp расширяет StatefulWidget { MyApp({Key? key}) : super(key: key); @переопределить _MyAppState createState() => _MyAppState(); } класс _MyAppState расширяет State { // Этот виджет является корнем вашего приложения. Строковая широта = 'Неизвестно'; Строковая долгота = 'Неизвестно'; окончательный bludartDB db_blueDart = bludartDB(); Таймер? местоположениеТаймер; @переопределить недействительный initState() { супер.initState(); // Вызов веб-сервиса здесь StartLocationUpdates(); } недействительный startLocationUpdates () { print("startLocationUpdates"); // Пример периодического запуска обновлений местоположения Timer. periodic(Duration(минут: 5), (Таймер t) async { ждут LocationService().fetchAndStoreLocation(); }); } // @переопределить // недействительный метод удаления() { // locationTimer?.cancel(); // Отменяем таймер, когда виджет удаляется // супер.dispose(); // } @переопределить Сборка виджета (контекст BuildContext) { вернуть MaterialApp( название: «SmarTrac-BD», debugShowCheckedModeBanner: ложь, тема: ThemeData( первичный образец: Colors.blue, ), домашняя страница: SplashScreen(), ); } } класс MyHomePage расширяет StatefulWidget { MyHomePage({Ключ? Ключ}): супер(ключ: ключ); @переопределить _MyHomePageState createState() => _MyHomePageState(); } класс _MyHomePageState расширяет State { @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( заголовок: Текст('Классико'), ), тело: Контейнер( цвет: Colors.blue.shade200, ), ); } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»