Android 10难以扫描无互联网接入WiFi热点,是否为Bug?求解决办法
Android 10下无法扫描无互联网WiFi的问题解答
嘿,这个问题其实不是Android 10的Bug,而是Google为了隐私保护和省电优化特意引入的系统限制!下面给你详细拆解原因和可行的解决办法:
为什么会扫不到无互联网的AP?
Android 10对WiFi扫描做了两项关键限制:
- 位置权限强制要求:必须获取
ACCESS_FINE_LOCATION(精确位置权限),才能获取完整的WiFi扫描结果——包括那些没有互联网接入的AP。如果权限不足,系统会自动过滤掉这类无网AP。 - 智能扫描过滤:为了降低功耗,系统会默认过滤掉它判定为“无用”的AP(比如无互联网的),尤其是当设备已经连接到其他WiFi或移动数据时,这种过滤会更严格。
可行的解决办法
1. 申请并获取正确的权限
首先要在AndroidManifest.xml里声明必要权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
然后在运行时动态申请ACCESS_FINE_LOCATION(这是危险权限,必须用户手动授权):
// 检查权限是否已授予 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // 申请权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION); }
2. 确保位置服务处于开启状态
即使你拿到了权限,如果设备的位置服务没开,系统还是会过滤扫描结果。可以引导用户开启:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); }
3. 调整扫描的时机
- 尽量在设备未连接任何WiFi/移动数据时执行扫描,此时系统不会过滤无互联网的AP。
- 如果设备已联网,必要时可以先断开当前网络再扫描(但要注意用户体验,提前告知用户)。
4. 特殊场景:系统级权限(仅针对系统应用)
如果你的应用是系统应用或者有特殊权限,可以申请NETWORK_SCOPE权限,配合ACCESS_NETWORK_STATE使用,能绕过部分扫描限制,但普通第三方应用无法获取这个权限。
验证小技巧
测试的时候可以这么操作:
- 关掉设备的移动数据和已连接的WiFi
- 确认位置服务已开启,且你的应用有精确位置权限
- 重新执行扫描,这时候应该就能看到那些无互联网的AP了
内容的提问来源于stack exchange,提问作者matdev




