【发布时间】:2021-05-25 10:57:02
【问题描述】:
我有一个 Android 应用程序和一个 IoT 设备,它们的连接和通信将通过 Wi-Fi 进行。物联网设备将提供一个热点(没有互联网),以便我们可以将我们的移动 Wi-Fi 与该设备热点连接。将手机与Wi-Fi连接后,当我们打开应用程序时,应用程序会尝试使用TCP套接字连接查找设备,与物联网设备进行连接和通信。
应用程序运行良好,并与设备成功通信。但这里的问题是,如果打开移动数据,连接和通信就不会发生。该应用仅适用于关闭移动数据的情况。
我猜该应用程序正在通过移动数据搜索物联网设备,因为移动数据具有有效的互联网连接而 Wi-Fi 没有。我希望应用程序仅通过 Wi-Fi 查找物联网设备,即使移动数据已开启。
我在 React Native 中有一个类似的应用程序,它具有相同的功能并且遇到了相同的问题。我使用react-native-tcp-socket 包修复了它,该包可以选择通过特定的interface(具有选项wifi、ethernet 和cellular)进行应用搜索。
两个应用程序都有一个硬编码的 IP 地址,用于连接到 IoT 设备。这仅在移动数据关闭时有效。在 React Native 应用程序中,我通过从 WifiManager 获取它,使用前面提到的带有动态 IP 地址的包来修复它。当我尝试使用 Android 应用程序时,它没有工作。
我查看了包的本机代码并尝试复制相同的内容,但收到以下错误:
java.net.ConnectException: failed to connect to /192.168.1.2 (port 6378) from /:: (port 39495): connect failed: ECONNREFUSED (Connection refused)
Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
有什么建议吗?
是否有其他实现方式可以实现输出?
【问题讨论】:
-
1) Android 设备是否已植根和/或受设备管理控制? 2) 你见过this answer to enabling and disabling mobile data programmatically
-
@MorrisonChang,Android 设备既不是 root 也不是由设备管理控制。您建议的答案与我的问题无关。即使移动数据处于开启状态,我也需要让移动应用找到并连接到 IoT 设备。
-
那么您应该显示您尝试过的哪些更改不起作用的代码。如果您想链接到使用了
react-native-tcp-socket的哪个部分可能会很有用。 -
感觉这里添加代码会太大。所以我用更多信息更新了这个问题。
标签: java android react-native tcp wifi