这有很多类似的问题(谷歌:"没有检测到互联网访问.不会自动重新连接."或:android force wifi连接编程).
我以为我在这里有一个答案,但它在安装6.0.1更新后停止工作(我可能有1个安全补丁).
似乎这是一种行为改变.
我有一些2013年nexus 7和6.0.1运行一个自助服务终端类型的应用程序,并希望以编程方式连接到没有互联网连接的特定无线网络.每个平板电脑都有一个唯一的静态IP地址:192.168.0.xx. 我使用普通的java套接字构造函数并检查接口是否正在使用:NetworkInterface.getNetworkInterfaces().
手动连接已经完成.有时会出现一个对话框,询问您是否要始终连接.我总是检查是的.
但wifi说:"在路由器重启电源后,没有检测到互联网接入.不会自动重新连接".
断开连接,启用,重新连接不起作用.它最多得到:ip6-localhost/:: 1.
有没有人有使用请求对象或bindProcessToNetwork的运气?
编辑:相关.
编辑:问题似乎与: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);
Run Code Online (Sandbox Code Playgroud)
但抛出"android.provider.Settings $ SettingNotFoundException:captive_portal_detection_enabled明确使用时,android studio不可见.
另外,执行全局设置列表不包含常量.
编辑一个adb shell设置put global captive_portal_detection_enabled 0似乎确实有效,但是当路由器重启电源时,这不能在现场完成.当平板电脑循环供电时,这个值似乎仍然存在.现在这个值显示在全局设置列表中.另外,使用原始字符串:Settings.Global.getInt(getContentResolver(),"captive_portal_detection_enabled"); 现在返回0.
编辑:看起来像设置它需要:android.permission.WRITE_SECURE_SETTINGS,但当然放入清单时失败,因为我们不是系统应用程序.
编辑:尝试执行shell命令抛出:java.lang.SecurityException,所以看起来你需要从adb发出命令:(
谢谢
android network-programming android-wifi android-6.0-marshmallow