android 6.0.1 强制 wifi 连接无法访问互联网

标签 android network-programming android-wifi android-6.0-marshmallow

这有很多类似的问题(谷歌:“未检测到互联网访问。不会自动重新连接。”或:android 以编程方式强制 wifi 连接)。

我以为我有答案here ,但它在安装 6.0.1 更新后停止工作(我可能有 1 个安全补丁)。

这似乎是一个 behaviour change .

我有一些 2013 年的 nexus 7 和 6.0.1,它们运行一个信息亭类型的应用程序,并希望以编程方式连接到没有互联网连接的特定无线网络。每台平板电脑都有一个唯一的静态 IP 地址,格式为:192.168.0.xx。我使用普通的 java 套接字构造函数并使用以下方法检查接口(interface)是否已启动:NetworkInterface.getNetworkInterfaces()。

已建立手动连接。有时会有一个对话框询问您是否要始终连接。我总是勾选是。

但 wifi 显示:“未检测到互联网访问。在路由器循环电源后不会自动重新连接”。

断开连接、启用、重新连接不起作用。充其量它得到:ip6-localhost/::1。

有没有人幸运地使用过请求对象或 bindProcessToNetwork?

编辑:related .

编辑:问题似乎出在:CAPTIVE_PORTAL_DETECTION_ENABLED - 这个字符串似乎在源代码中定义:

public static final String
        CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled";
    ...
    MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);

但抛出“android.provider.Settings$SettingNotFoundException: captive_portal_detection_enabled 明确使用且对 android studio 不可见。

另外,做一个全局设置列表不包含常量。

编辑做一个 adb shell settings put global captive_portal_detection_enabled 0 似乎确实有效,但是当路由器循环电源时,这不能在现场完成。这个值似乎在平板电脑循环供电时持续存在。现在这个值出现在全局设置列表中。同样,使用原始字符串:Settings.Global.getInt(getContentResolver(),"captive_portal_detection_enabled");现在返回 0。

编辑:看起来设置它需要:android.permission.WRITE_SECURE_SETTINGS,但是当然这在放入 list 时会失败,因为我们不是系统应用程序。

编辑:尝试执行 shell 命令抛出:java.lang.SecurityException,因此看起来您需要从 adb 发出命令 :(

谢谢

最佳答案

您能否尝试将全局设置 captive_portal_detection_enabled 设置为 0(假)。

实际情况是,默认情况下,每次您连接到 wifi 时,FW 都会针对服务器(通常是 google)进行测试,以查看它是否是强制 wifi(需要登录)。所以如果你的 wifi 没有连接到谷歌,这个检查就会失败。之后,设备知道 wifi 没有互联网连接并且不会自动连接到它。

将此设置设置为 0,将避免此检查。

以编程方式 Settings.Global.putInt(getContentResolver(), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 0);

您可以通过 adb 进行测试:

adb shell settings put global captive_portal_detection_enabled 0

然后像这样检索它的值:

adb shell settings list global | grep "captive"

恕我直言,这不是一件好事,因为您正在为用户更改设置,而许多 FW 甚至不提供高级设置来由用户自己启用/禁用它。 (谷歌没有)。但也许它适合您的需求。

希望对您有所帮助!

关于android 6.0.1 强制 wifi 连接无法访问互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218510/

相关文章:

java - 扫描非本地主机上的端口

java - 为什么Netty性能不佳?

android - 从一组非常稀疏的 wifi 数据生成 3d 网格

android - 减少两次 WiFi 扫描之间的延迟

android - 如果在两个相对布局之间生成另一​​个布局,则动态删除 marginetop 相对布局

android - 为 android 安装 facebook sdk,安装过程,gen 文件夹丢失

java - 如何使用旧的订单 ID 格式在本地验证 Google 收据验证?

c - 套接字创建失败的原因有哪些?

android - (Android) 是否有可靠的信号表明网络 channel 是可路由的?

java - Android中的Sqlite : DataBaseObjectNotClosedException