Flutter Geolocator插件:设备闲置熄屏时实时定位追踪失效
解决方案
iOS 平台处理
权限与后台模式配置
- 在
Info.plist中添加必要权限描述与后台模式:<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>需要获取位置以追踪技术人员实时位置</string> <key>NSLocationWhenInUseUsageDescription</key> <string>需要获取位置以追踪技术人员实时位置</string> <key>UIBackgroundModes</key> <array> <string>location</string> </array> - 代码中开启后台定位允许:
await Geolocator.requestPermission(); await Geolocator.enableBackgroundMode(enable: true);
- 在
防止系统自动暂停定位
- 创建定位流时设置高精度,并关闭iOS自动暂停机制:
final locationStream = Geolocator.getPositionStream( locationSettings: LocationSettings( accuracy: LocationAccuracy.high, distanceFilter: 0, // 确保微小位置变化也触发,按需调整 ), ); if (Platform.isIOS) { await Geolocator.setLocationSettings( iOSSettings: IOSSettings( pausesLocationUpdatesAutomatically: false, allowsBackgroundLocationUpdates: true, ), ); } - 注:iOS后台静止时系统可能降低定位频率,若需严格定时,可结合
BackgroundFetch插件补充触发定位请求,但需注意系统后台任务限制。
- 创建定位流时设置高精度,并关闭iOS自动暂停机制:
Android 平台处理
权限配置
- 在
AndroidManifest.xml中添加定位相关权限:<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> - 代码中请求后台定位权限(适配Android 10+):
if (Platform.isAndroid) { final status = await Geolocator.requestPermission(); if (status == LocationPermission.denied) { // 处理权限拒绝逻辑 } else if (status == LocationPermission.deniedForever) { // 引导用户前往设置开启权限 } }
- 在
解决间隔与距离过滤器冲突
- 若需定时获取静止设备位置,不要设置
distanceFilter,仅配置时间间隔:final locationStream = Geolocator.getPositionStream( locationSettings: LocationSettings( accuracy: LocationAccuracy.high, interval: 30000, // 30秒间隔 fastestInterval: 15000, // 系统允许的最快触发间隔 ), ); - 若必须同时使用距离过滤和定时,可改用手动定时触发定位请求:
Timer.periodic(Duration(seconds: 30), (timer) async { if (await Geolocator.isLocationServiceEnabled()) { final position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, ); // 处理获取到的位置数据 } }); - 注:Android后台定位会受电池优化影响,需引导用户将应用加入电池优化白名单。
- 若需定时获取静止设备位置,不要设置
通用注意事项
- 平衡电池消耗:后台实时定位会增加电量消耗,建议根据业务动态调整精度和间隔,比如静止时降低精度、延长间隔,移动时恢复高精度。
- 真机测试:务必在真实设备上验证后台定位功能,模拟器的后台行为与真机存在差异。
内容的提问来源于stack exchange,提问作者Mohammed Shefeek A
相关产品推荐
相关产品推荐

