android - 获取运行我的应用程序的 Android 设备的 IP 的最可靠方法是什么?不是公网IP

标签 android chromebook

我有一个应用程序,它有一个网络服务器,用户将从他们的家庭 LAN 访问该服务器。目前我有两种获取设备 IP 的方法,但我不知道哪一种更可能是正确的。

我的常规方式:

  List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress().toUpperCase();

我的替代方法:

        WifiInfo connectionInfo = wifiMgr.getConnectionInfo();
        int ip = connectionInfo.getIpAddress();

我认为这一直工作正常,但我确实有一些关于它的统计数据,看起来这两个 ip 似乎只有大约 4% 的时间不同。

此外,我刚刚在 Chromebook 上试用了我的应用程序,替代方法实际上是正确的方法,而不是正常方法。

那么我怎么知道哪种方式更好或者是否有更好的选择?

最佳答案

它们非常不可靠,因为您必须处理很多边缘情况。

我更喜欢使用免费的外部服务;进行网络调用并获得适当的面向公众的 IP。尝试 https://www.ipify.org/

关于android - 获取运行我的应用程序的 Android 设备的 IP 的最可靠方法是什么?不是公网IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706427/

相关文章:

java - AutoCompleteSupportFragment 在选择位置后不断禁用它的自身

android - 卸载受密码保护的应用程序

android - 移动 Chrome 中用于测试多个 android 包名称的 Intent URL

android - 多个按钮的一种方法?

android - 是否可以在 ChromeBook 上安装 Android Studio?

android - ChromeOS 上的 Android 应用程序的侧加载和调试机制是什么?

python - 使用crew或pip安装程序在Chromebook上安装Python的matplotlib

java - Google Play 游戏服务 : strange sign in behavior

visual-studio-code - 如何在 Chromebook 上的 Visual Studio Code 中向上或向下移动一行

python - 在 Chromebook 上运行 Selenium 需要哪些版本的 Chromium、Selenium 和 Chromedriver?