Я хочу получить географическое расположение устройства в фоновом режиме, даже когда приложение закрыто.Flutter предоставляет Isolates вместе с AlarmManager, как способ сделать это.
Моя конечная цель, опять же, состоит в том, чтобы получить геолокацию устройства, даже когда приложение было прекращено.
Iпрошли https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124, но не поняли это полностью, так как я новичок во флаттере.Если это единственный способ, пожалуйста, помогите мне понять это.
Я использую плагины: - https://pub.dartlang.org/packages/geolocator https://pub.dartlang.org/packages/flutter_isolate
Проблема возникает, как я вижу, когдаGeolocator пытается найти местоположение после внутренней проверки плагина GoogleApiAvailability с помощью Channel.invokeMethod внутри вторичного изолята.Выдает ошибку: -
[ +81 ms] E/GooglePlayServicesUtil(11608): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
[ ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): Failed to handle method call
[ ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
[ ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:12)
[ ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)
[ ] E/MethodChannel#flutter.baseflow.com/google_api_availability/methods(11608): at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)
Посмотрите на: - https://github.com/BaseflowIT/flutter-geolocator/blob/b869f3221c890c2ae87b22d0384577fd902d38ca/lib/geolocator.dart#L75
, который вызывает GoogleApiAvailability по адресу: - https://github.com/BaseflowIT/flutter-google-api-availability/blob/96ffe46a7cf8d81bfa107ca83ce2aaf8a5ff4847/lib/src/google_api_availability.dart#L23
Это строкаон падает на вторичном изоляторе.
Плагин геолокации имеет дополнительную конфигурацию, в которой я могу заставить LocationManager подключаться. Это не приводит к сбою, но зависает, как только приложение завершается.Ниже показано, как это принудительно устанавливается в плагине geolocator: - https://github.com/BaseflowIT/flutter-geolocator/blob/b869f3221c890c2ae87b22d0384577fd902d38ca/lib/geolocator.dart#L64
Этот флаг можно установить перед вызовом метода getLocation.
Если это не сработает, мне нужна помощь, чтобыкак достичь своей цели.
В идеале это должно дать мне местоположение на вторичном изоляте.Мне нужно понять правильные конфигурации, необходимые для того же.