Android Nearby Connections应用后台持续发现设备可行性咨询
Android Q+ 下 Nearby Connections 后台持续发现的解决方案
先明确核心限制:Android Q(API 29)及以上版本大幅收紧了后台蓝牙、Wi-Fi扫描的权限规则,系统会主动限制后台应用的扫描频率,甚至直接阻断后台扫描操作,这就是你在高版本设备上功能失效的根本原因。
用前台服务兜底:这是目前最可靠的解决办法。把Nearby Connections的发现逻辑放到前台服务里,前台服务会在通知栏挂一个持续的通知,明确告知用户应用在后台运行,系统就不会轻易限制它的扫描能力。
- 具体操作:
- 在Manifest中声明前台服务权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> - 编写Service类,在
onStartCommand方法里先启动符合规范的前台通知,再初始化Nearby Connections并启动发现流程。 - 必须调用
startForeground(NOTIFICATION_ID, notification)让服务进入前台状态,notification需要包含图标、标题等必要元素。
- 在Manifest中声明前台服务权限:
- 具体操作:
补全对应权限:Android 12(API 31)及以上版本,除常规蓝牙权限外,还需申请
BLUETOOTH_SCAN权限;如果扫描不需要依赖位置信息,可在权限声明时加上android:usesPermissionFlags="neverForLocation";若扫描依赖位置,还得补充ACCESS_BACKGROUND_LOCATION权限。不过就算有这些权限,系统仍可能限制后台扫描频率,搭配前台服务效果最优。调整Nearby策略参数:尝试切换发现策略,比如用
Strategy.P2P_STAR替代P2P_CLUSTER,前者在后台环境下稳定性更好;另外可以降低扫描频率,使用更省电的模式,减少被系统限制的概率。申请电池优化豁免:如果应用被系统电池优化策略盯上,就算是前台服务也可能被暂停。可以引导用户将应用加入电池优化白名单,先在Manifest中声明
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限,再在运行时请求用户授权。
内容的提问来源于stack exchange,提问作者Vitor Santos
相关产品推荐
相关产品推荐

