Xamarin Forms Android权限设为每次询问时唤醒无网络,是否为Xamarin问题?
结论
该问题不属于Xamarin Forms框架本身的通用缺陷,是Android平台权限回收机制与旧版Xamarin.Essentials中Connectivity API的权限依赖逻辑共同导致的特殊场景问题。
触发原理
- 从Android 11开始,「每次询问」级别的权限在应用退到后台满2分钟后,系统会自动收回临时授权,下次应用启动时需要重新申请
- 1.7.0版本以下的Xamarin.Essentials Connectivity API,默认依赖位置权限获取完整网络状态信息(包括Wi-Fi SSID、蜂窝网络所属运营商区域等),如果位置权限被回收,API会直接返回
NetworkAccess.None,不会降级返回基础连通性结果 - 位置权限设置为「始终允许」时,后台不会触发自动回收,因此API返回结果完全正常
修复方案
- 第一优先级升级Xamarin.Essentials到1.7.0及以上正式版,该版本已经优化了Connectivity API的逻辑,无位置权限时会跳过附属信息获取,只返回基础的网络连通状态,不会误报无网络
- 若无法升级依赖,可自行实现Android原生网络检测逻辑,直接调用系统
ConnectivityManager检测链路连通性,不需要申请位置权限即可得到准确结果 - 临时兼容方案可以在应用从后台切回前台时,主动触发一次位置权限申请,授权完成后Connectivity API即可恢复正常返回
内容的提问来源于stack exchange,提问作者user1557124
相关产品推荐
相关产品推荐

