android 6.0.1强制wifi连接,无需互联网接入
这有许多类似的问题(谷歌的“未检测到互联网接入。不会自动重新连接。”或:android以编程方式强制wifi连接) 我原以为我有答案,但在安装了6.0.1更新(我有5月1日的安全补丁)后,它就停止工作了 看起来这是一个很好的例子 我有一些6.0.1版的2013 nexus 7,运行kiosk类型的应用程序,希望通过编程方式连接到没有互联网连接的特定无线网络。每个平板电脑都有一个唯一的静态ip地址,格式为:192.168.0.xx。我使用普通的java套接字构造函数,并使用:NetworkInterface.getNetworkInterfaces()检查接口是否正常 已进行手动连接。有时会出现一个对话框,询问您是否希望始终连接。我总是选择“是” 但wifi显示:“未检测到互联网接入。在路由器循环通电后不会自动重新连接” 断开、启用、重新连接不起作用。最多只能得到:ip6 localhost/::1 有人使用过请求对象或bindProcessToNetwork吗 编辑: 编辑:问题似乎出在:Capture\u PORTAL\u DETECTION\u ENABLED上-此字符串似乎是在源代码中定义的:android 6.0.1强制wifi连接,无需互联网接入,android,network-programming,android-wifi,android-6.0-marshmallow,Android,Network Programming,Android Wifi,Android 6.0 Marshmallow,这有许多类似的问题(谷歌的“未检测到互联网接入。不会自动重新连接。”或:android以编程方式强制wifi连接) 我原以为我有答案,但在安装了6.0.1更新(我有5月1日的安全补丁)后,它就停止工作了 看起来这是一个很好的例子 我有一些6.0.1版的2013 nexus 7,运行kiosk类型的应用程序,希望通过编程方式连接到没有互联网连接的特定无线网络。每个平板电脑都有一个唯一的静态ip地址,格式为:192.168.0.xx。我使用普通的java套接字构造函数,并使用:NetworkInte
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:capture\u portal\u detection\u”在显式使用时启用,并且对android studio不可见
此外,全局执行设置列表不包含常量
编辑执行adb外壳设置放置全局捕获\u门户\u检测\u启用的0似乎可以工作,但在路由器循环通电时无法在字段中执行此操作。平板电脑循环通电时,此值似乎持续存在。现在,此值显示在全局设置列表中。此外,使用原始字符串:settings.global.getInt(getContentResolver(),“captive_portal_detection_enabled”);现在返回0
编辑:看起来像它需要的设置:android.permission.WRITE\u SECURE\u设置,但当放入清单时,当然会失败,因为我们不是一个系统应用程序
编辑:尝试执行shell命令时抛出:java.lang.SecurityException,因此看起来您需要从adb发出命令:(
谢谢请尝试将全局设置“捕获\u门户\u检测\u启用”设置为0(错误) 实际发生的是,默认情况下,每次你连接到wifi,FW都会对服务器(通常是谷歌)进行测试,看看它是否是一个专属wifi(需要登录)。因此,如果您的wifi未连接到谷歌,此检查将失败。之后,设备会知道wifi没有互联网连接,并且不会自动连接到它 将此设置设置为0将避免此检查 以编程方式
Settings.Global.putInt(getContentResolver(),Settings.Global.capture\u PORTAL\u DETECTION\u ENABLED,0);
您可以通过adb进行测试:
adb shell settings put global captive_portal_detection_enabled 0
然后像这样检索它的值:
adb shell settings list global | grep "captive"
我认为这不是一件很好的事情,因为你正在为用户更改一个设置,而许多FWs甚至没有提供一个高级设置来启用/禁用用户自己的设置。(谷歌没有)。但也许它适合你的需要
希望有帮助!一种非根解决方案,它是一种黑客技术:p
我不知道为什么,但它能工作…是的,我听说过,但Android studio说:无法解析符号:Settings.Global.capture\u PORTAL\u DETECTION\u ENABLED和adb shell Settings list Global在6.0.1上不包含capture,您可能需要根访问权限,而且capture\u PORTAL\u DETECTION\u ENABLED是隐藏的,因此没有简单的方法来实现这一点尝试直接使用字符串“captive\u portal\u detection\u enabled”,而不是不可见的常量。此外,在6.0.1中,确保captive存在。它在6.0.1之前也存在。检查此链接:它在那里:公共静态最终字符串captive\u portal\u detection\u enabled=“captive\u portal\u detection\u enabled“;。并将_移动到_GLOBAL.add(Settings.GLOBAL.CAPTIVE_PORTAL_DETECTION_已启用);是否有一个不涉及根访问或adb的解决方案?如果你在手机和路由器上循环电源,它是否有效?@RayTayek当然,它在这里工作得很好,但我不知道为什么。在我的情况下,它应该与PC连接/断开,AP应该打开/关闭数千次:D@RayTayek两款设备:索尼XZ和Nexus9