BLE前台服务扫描1分钟后自动停止问题求助
问题原因分析
你的BLE前台服务在应用退到后台后扫描仅运行1分钟就停止,核心原因是Android系统的后台BLE扫描权限限制,具体细节如下:
缺少后台位置权限:从Android 10(API 29)开始,系统要求应用必须持有
ACCESS_BACKGROUND_LOCATION权限,才能在后台(包括前台服务运行但应用UI不可见的场景)持续进行BLE扫描。如果你的应用仅申请了ACCESS_FINE_LOCATION权限,系统会在应用退到后台后强制限制BLE扫描的运行时长(约1分钟),之后暂停扫描;当应用回到前台,扫描权限恢复,扫描重新启动。扫描模式的后台兼容性问题:你当前使用的
SCAN_MODE_LOW_LATENCY是为前台场景优化的高功耗扫描模式,即使服务是前台状态,当应用UI退到后台时,系统可能会对该模式的扫描进行时长限制。如果是长期后台扫描需求,SCAN_MODE_LOW_POWER模式的兼容性更好,更不容易被系统限制。
解决建议
- 添加后台位置权限声明
在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
注意:该权限仅对API 29及以上版本生效,可配合android:minSdkVersion做版本适配。
动态申请后台位置权限
在启动BLE服务前,除了请求ACCESS_FINE_LOCATION,还要主动请求ACCESS_BACKGROUND_LOCATION权限(针对API 29+设备),确保用户授权。调整扫描模式(可选)
如果你的扫描需求不需要极低延迟,可将扫描模式改为SCAN_MODE_LOW_POWER,减少系统对扫描的限制概率:
private val scanSettings = ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) .build()
内容的提问来源于stack exchange,提问作者Diky Wahyudi
相关产品推荐
相关产品推荐

