// lib/services/gnss/phone_gps_connection.dart import 'dart:async'; import 'dart:typed_data'; import 'package:geolocator/geolocator.dart'; import 'gnss_connection.dart'; import 'gnss_device_service.dart'; class PhoneGpsConnection implements GnssConnection { @override GnssConnectionType get type => GnssConnectionType.phoneGps; final _stateController = StreamController.broadcast(); final _positionController = StreamController.broadcast(); StreamSubscription? _positionSub; @override Stream get nmeaLines => const Stream.empty(); // Nincs NMEA @override Stream get positionStream => _positionController.stream; @override Stream get connectionState => _stateController.stream; @override Future connect(String address) async { _stateController.add(GnssConnectionState.connecting); bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); if (!serviceEnabled) { _stateController.add(GnssConnectionState.error); return; } LocationPermission permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { _stateController.add(GnssConnectionState.error); return; } } _stateController.add(GnssConnectionState.connected); // Belső GPS folyamatos olvasása _positionSub = Geolocator.getPositionStream( locationSettings: const LocationSettings( accuracy: LocationAccuracy.high, distanceFilter: 0, // Folyamatos frissítés ), ).listen((Position pos) { _positionController.add(pos); }); } @override Future disconnect() async { await _positionSub?.cancel(); _stateController.add(GnssConnectionState.disconnected); } @override void sendData(Uint8List data) { // A telefon beépített GPS-e nem fogad RTCM adatokat } @override void dispose() { _positionSub?.cancel(); _positionController.close(); _stateController.close(); } }