Фоновое выполнение Фоны останавливается через некоторое время (таймер и мониторинг местоположения не работают)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Фоновое выполнение Фоны останавливается через некоторое время (таймер и мониторинг местоположения не работают)

Сообщение Anonymous »

Я строю приложение Flutter, которое необходимо непрерывно работать в фоновом режиме, чтобы отслеживать, находится ли пользователь в тренажерном зале, и сохранить время тренировки. /> [*] Через некоторое время таймер прекращается, и мониторинг местоположения также останавливается.

Код: Выделить всё

flutter_background
[*]

Код: Выделить всё

geolocator
[*]

Код: Выделить всё

permission_handler
[*]Foreground service notification (Android)

But still, the execution eventually stops.
Here is the main part of the implementation (simplified but showing where background execution is set up):

Код: Выделить всё

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_background/flutter_background.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:latlong2/latlong.dart';
import 'package:geolocator/geolocator.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_background/src/android_config.dart' as fb;

class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State createState() => _HomeScreenState();
}

class _HomeScreenState extends State {
bool running = false;
Duration elapsed = Duration.zero;
LatLng? gymLocation;
static const double gymRadiusMeters = 35.0;
bool inGym = false;
Timer? _locationTimer;
Timer? _statusTimer;
static bool _backgroundStarted = false;

@override
void initState() {
super.initState();
_setupApp();
_ensureBackgroundServiceStarted();
}

Future _ensureBackgroundServiceStarted() async {
if (!_backgroundStarted) {
_backgroundStarted = true;
await _requestPermissions();
await _startBackgroundMode();
await _loadGymLocation();
_startPersistentBackgroundLocationMonitor();
if (await Permission.ignoreBatteryOptimizations.isDenied) {
await Permission.ignoreBatteryOptimizations.request();
}
}
}

void _startPersistentBackgroundLocationMonitor() {
Timer.periodic(const Duration(seconds: 30), (_) async {
final prefs = await SharedPreferences.getInstance();
final lat = prefs.getDouble('gym_lat');
final lng = prefs.getDouble('gym_lng');
if (lat == null || lng == null) return;
final gymLoc = LatLng(lat, lng);

try {
final pos = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.low,
timeLimit: const Duration(seconds: 10),
);
final Distance distance = Distance();
final double dist = distance(
LatLng(pos.latitude, pos.longitude),
gymLoc,
);
final bool inside = dist  

Подробнее здесь: [url]https://stackoverflow.com/questions/79738083/flutter-background-execution-stops-after-some-time-timer-location-monitoring[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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