Die Ausführung des Flattern -Hintergrunds stoppt nach einiger Zeit (Timer- und Standortüberwachung funktioniert nicht)Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Die Ausführung des Flattern -Hintergrunds stoppt nach einiger Zeit (Timer- und Standortüberwachung funktioniert nicht)

Post by Anonymous »

Ich erstelle eine Flutter -App, die kontinuierlich im Hintergrund ausgeführt werden muss, um zu verfolgen, ob der Benutzer im Fitnessstudio ist, und einen Trainingstimer läuft. /> [*] Nach einiger Zeit stoppt der Timer und die Position der Standortüberwachung wird ebenfalls gestoppt.

Code: Select all

flutter_background
[*]

Code: Select all

geolocator
[*]

Code: Select all

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):

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post