我有一个应用程序需要通过 Wi-Fi 连接到硬件。为此,硬件提供了离线 Wi-Fi 热点。热点的 DHCP 不会为我们提供网关或 DNS,因此我们立即知道它仅供离线使用。
最终用户在工作时必须始终保持 Wi-Fi 连接,以便接收传感器数据并在数据出现问题时发出警报。但与此同时,我们不想强迫最终用户的移动设备离线。他应该能够将他的移动数据用于我们和他拥有的所有其他应用程序。
我虽然我可以通过调用来控制它android.net.ConnectivityManager.requestNetwork。但它似乎工作不可靠。会打电话requestNetwork
in my app影响如果所有其他应用程序可以访问移动数据吗?
这是我们可以控制的吗?我在不同制造商和 Android 版本的多台设备上进行了测试,它们的行为都不同。
例如。 Pixel 3a 运行良好。一段时间后,我收到有关 Wi-Fi 离线的通知。如果我忽略它,它就会继续工作。如果我按“是”,我将处于离线状态并连接到 Wi-Fi。
华为P20 Lite似乎火了OnLost
我的移动数据事件NetworkCallback
每次我要求的时候。就像每次我重新连接时它都会尝试取消移动连接,因为我在 wifi 中。某些设备提供“智能开关”(三星)或“Wi-Fi+”(华为)模式,但默认情况下并未启用。要求用户打开它似乎很麻烦,因为他们可能不想在不同的场景中使用它。
Here are some examples for the different devices:
![enter image description here](https://i.stack.imgur.com/XH1Me.png)
使用时requestNetwork()
要坚持使用离线 wifi 网络,您需要一个实例ConnectivityManager
。您可以通过以下方式获取:
final ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
此方法返回操作系统的连接管理器。因此,其他应用程序也会受到您设置的“粘性”模式的影响ConnectivityManager
in.
不幸的是,我认为应用程序不可能强制操作系统保持与离线 Wifi 网络的连接,同时继续使用移动数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)