android - Lollipop 将 Activity 网络切换到 wifi(即使没有互联网)以支持 TCP 和组播 UDP

标签 android android-wifi

我有一些不需要互联网访问的本地网络服务。如果在 wifi 网络上未检测到互联网连接(感叹号图标),因为 Lollipop android 可以自动将其 Activity 网络切换到移动数据。我收到 ConnectivityManager.CONNECTIVITY_ACTION 广播,表示移动设备正在接管。

当发生这种情况时,我似乎无法建立 TCP 连接并且多播 UDP 数据包被忽略,即使我获得了 MulticastLock。我试图重新获取它,使用了 requestNetworkFeature()、setNetworkPreference() 以及 ConnectivityManager 必须提供的几乎所有其他方法,但没有任何帮助。

但是关闭移动数据会使android切换回wifi,我收到广播说它正在切换并且一切都恢复正常。似乎 wifi 网络必须是 Activity 网络才能具有完整的功能。

有没有办法强制系统在没有互联网的情况下使用 wifi?

最佳答案

我遇到了类似的问题。通过使用新的 android.net.Network 类及其方法 bindSocket,我至少能够通过 WiFi 建立套接字连接。

只需从 ConnectivityManager.getAllNetworks() 中选择 WiFi 网络,然后将您的套接字绑定(bind)到该网络或使用网络中的套接字工厂。

Network 类和 ConnectivityManager 中的相应方法需要 SDK 21,但如果不想切换 SDK,可以使用反射。

关于android - Lollipop 将 Activity 网络切换到 wifi(即使没有互联网)以支持 TCP 和组播 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104592/

相关文章:

java - 如何修复 Android Studio 中的 Gradle 构建问题显示类路径异常

android - 在 Android 软键盘的文本区域中显示转到按钮而不是返回

android-studio - Android 模拟器 : wifi connected, 没有互联网

android - 如何检查我的 Android 设备是否支持 wifi direct?

android - 如何避免 Android GCM 消息延迟/更改心跳

SDK 和 ADT 更新后,Android R.java 不会在 Eclipse 中重新生成

java - 屏幕旋转后未调用 onSaveInstanceState

android - 在 Android 中将文本作为 SeekBar 的背景

android - 可视化wifi信号强度

android - 连接到特定的接入点android