You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动