Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android 6.0.1强制wifi连接,无需互联网接入_Android_Network Programming_Android Wifi_Android 6.0 Marshmallow - Fatal编程技术网

android 6.0.1强制wifi连接,无需互联网接入

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

这有许多类似的问题(谷歌的“未检测到互联网接入。不会自动重新连接。”或: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上-此字符串似乎是在源代码中定义的:

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

  • 重启手机,连接到非互联网Wifi
  • 转到“设置”并创建新用户
  • 继续,继续,直到看到“正在检查连接”
  • 一旦你看到“正在检查连接”,就关掉你的手机
  • 再次打开你的手机,你将在“所有者”用户,保持它
  • 切换Wifi,感叹号应快速消失:)
  • 删除该新用户或将其留在那里

  • 我不知道为什么,但它能工作…

    是的,我听说过,但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