获取我的 wifi IP 地址 Android

2023-12-01

当手机连接wifi时,如何获取手机的ip地址?

我找到了一个方法here但即使我在 wifi 下,它也会返回类似 24.182.239.255 的东西,并且我期望类似 192.168.1.10 的东西。

我想要这样的东西:

if (you are under wifi)
    String ip4 = getWifiIP()
else
    String ip4 = getIPAddress with the method linked before

非常感谢!


所以需要考虑的是Formatter.formatIpAddress(int)正在被弃用:

此方法在 API 级别 12 中已弃用。 使用 getHostAddress(),它同时支持 IPv4 和 IPv6 地址。此方法不支持 IPv6 地址。

所以使用formatIpAddress(int)尽管它会起作用,但可能不是一个好的长期解决方案。

如果您绝对希望获取 WiFi 接口的 IP 地址,这里有一个潜在的解决方案:

protected String wifiIpAddress(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
    int ipAddress = wifiManager.getConnectionInfo().getIpAddress();

    // Convert little-endian to big-endianif needed
    if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
        ipAddress = Integer.reverseBytes(ipAddress);
    }

    byte[] ipByteArray = BigInteger.valueOf(ipAddress).toByteArray();

    String ipAddressString;
    try {
        ipAddressString = InetAddress.getByAddress(ipByteArray).getHostAddress();
    } catch (UnknownHostException ex) {
        Log.e("WIFIIP", "Unable to get host address.");
        ipAddressString = null;
    }

    return ipAddressString;
}

如之前的回复所述,您需要在您的AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

请注意,这只是一个示例解决方案。您应该花时间检查空值等,以确保用户体验顺利。

讽刺的是,一方面谷歌正在弃用formatIpAddress(int),但仍然有获取IP地址()仍然返回一个整数值。 IP 地址为 int 也排除了其与 IPv6 兼容的可能性。

接下来的事实是字节序可能是也可能不是问题。我只测试了三个设备,它们都是小尾数法。似乎字节序可能会根据硬件而变化,即使我们在虚拟机中运行,这仍然可能是一个问题。因此,为了安全起见,我在代码中添加了字节序检查。

获取地址(字节[])似乎希望整数值是大尾数。通过研究发现网络字节顺序是大端字节序。这是有道理的,因为像 192.168.12.22 这样的地址是一个大端数字。


查看锤子网GitHub 项目。它实现了上面的代码以及一系列健全性检查、处理 AVD 默认值的能力、单元测试和其他东西。我必须为我的应用程序实现此功能,并决定开源该库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取我的 wifi IP 地址 Android 的相关文章

  • 如何用Android做交互动画(翻译)

    我在 Android 中有一些 png 序列 我需要将它们的 x 和 y 位置从屏幕顶部到底部的翻译动画化 当动画发生时 我需要对象来接收单击事件 我知道这在 3 0 之前的 Android 版本中效果不太好 因为display对象的位置与
  • Phonegap(应用程序错误...发生网络错误)

    我已经使用phonegap 创建了一个版本 在index html 文件中 我编写了一个简单的iframe 用于加载网站 当我从phonegap获取本地url时它就起作用了 但如果我将整个构建作为 zip 文件上传到 PhoneGap 中
  • 如何使用具有三种布局的视图翻转器?

    我目前正在使用ViewFlipper我的主要活动有两种不同的布局 我想使用第三种布局 但我只能找到showNext and showPrevious 命令 有人可以告诉我如何使用来实现第三种布局吗ViewFlipper 为您制作了一个示例
  • 在 Android 市场中以编程方式检查我的应用程序版本

    目前 我正在启动时检查应用程序版本代码 并将其与我的服务器上的最新版本代码进行匹配 并根据此匹配 我发送用户从 Android 市场获取最新更新 它运行良好 但我的问题是我必须手动更改服务器上的最新版本代码 并且我不知道新版本何时发布APK
  • 如何在 Android 中创建始终位于顶部的全屏覆盖 Activity

    我希望能够创建一个始终位于 Android 显示前面的 Activity 它不应该接收任何输入 只需将其传递到其下面的任何应用程序即可 像平视显示器之类的东西 我能够研究我需要将底层窗口类型设置为 TYPE SYSTEM ALERT 但看起
  • 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

    我正在编写一个使用 RoboSpice 的应用程序 在请求侦听器 onRequestFailure SpiceException arg0 中 有没有办法确定该错误是由于发生 401 HTTP 错误而导致的 我有一个后端服务 当令牌过期时
  • 在活动启动期间优雅地处理屏幕方向变化

    我正在尝试找到一种方法来正确处理设置活动 其中活动的方向是根据启动它的意图中的数据确定的 这是一款用户可以选择关卡的游戏 其中一些是纵向的 一些是横向的 我面临的问题是setRequestedOrientation ActivityInfo
  • Android - 使用 SAX 解析器解析大文件

    我正在尝试使用 SAX 解析器解析来自 webservice 的 xml 数据 当我尝试使用 URL 解析数据 大小 7 4MB 时 它工作正常 但是当我从 URL 复制 xml 数据并放置 xml 文件时 size 7 4MB 在raw文
  • 旋转 Google 地图中的两层标记图标

    在我的应用程序中 我向地图添加了一定数量的标记 如下所示 private fun addMarker googleMap GoogleMap location Location val options MarkerOptions optio
  • 如何在Room的数据库迁移中正确添加索引?

    我在迁移 Room 数据库时遇到问题 在更新的数据库中 我必须将一个字段从整数更改为双精度值 我读到它并不像听起来那么容易 为了做到这一点 我必须使用这个更改后的属性创建新的临时表 复制前一个表中的所有值 删除旧的值 最后重命名临时表 我的
  • Android 5 Lollipop 阴影方向或 y 偏移

    是否有可能改变 Y 偏移的阴影方向 现在我有以下布局
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • Grade Plugin 3-alpha1 输出文件导致错误

    我正在尝试将项目更新到 Android Studio 3 build gradle 文件中不再接受以下代码片段 applicationVariants all variant gt variant outputs each out gt d
  • Android - 检测视图上的双击和三次点击

    我一直在尝试构建一个可以检测双敲击和三敲击的敲击检测器 在我的努力失败后 我在网上搜索了很长时间以找到可以使用的东西 但没有运气 奇怪的是 像这样的图书馆如此稀缺 有什么帮助吗 你可以尝试这样的事情 尽管我通常建议不要使用三次点击作为一种模
  • Android:选择 EditField 上焦点上的所有文本

    我试图让 Android 在获得焦点时选择 EditText 字段中的所有文本 我在布局中使用此属性 在两个字段上 android selectAllOnFocus true 我不确定这是否相关 但为了将光标移动到第一个可编辑字段 前面 还
  • JavaScript 点击事件在 Android 4.0.4 默认浏览器上的 Samsung Galaxy SIII 上不起作用

    我在 Android 4 0 4 上使用 Samsung Galaxy SIII 的默认浏览器时遇到了最奇怪的问题 对于以下页面 单击链接将不会触发 JavaScript 处理程序 从其中一个 div 的内容中删除单个 a 字母使它们再次工
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • Android Webview隐私浏览

    我在我的 Android 应用程序中使用 webview 从多个站点获取一些网页 我对 webview 行为有一些疑问 webview 是否存储历史记录 cookie 表单自动填充信息 如果是的话 我们可以阻止它这样做吗 如果 Webvie
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐

  • 在 ARMv6 上失败之前的检查点之后重新启动 mpi 从站

    UPDATE 我有一个大学项目 我应该在其中使用 RP 建立一个集群 现在我们有了一个功能齐全的系统 并且启用了 BLCR MPICH BLCR 与与该库链接的正常进程配合得很好 我们必须通过管理 Web 界面展示的演示包括 并行执行作业
  • Tomcat Windows 服务器中启用 SSL

    我想在 Windows Server 2008 和 tomcat 7 上的网站上启用 https 我从证书网站获得以下文件 ca crt pem csr pkcs 我知道我必须在 tomcat 的 server xml 中添加以下内容
  • 实体框架如何与递归层次结构一起工作? Include() 似乎不适用于它

    我有一个Item Item has a Category Category has ID Name Parent and Children Parent and Children are of Category too 当我对特定的实体执行
  • 在嵌入式 Linux 平台上使用 std::string 时出现段错误

    我已经花了几天时间来解决我的应用程序在嵌入式 Arm Linux 平台上运行的问题 不幸的是 该平台阻止我使用任何常用的有用工具来查找确切的问题 当相同的代码在运行 Linux 的 PC 上运行时 我没有收到这样的错误 在下面的示例中 我可
  • 网络调用后绑定到 UIRefreshControl

    我是 RxSwift 的新手 我想知道如何能够 反应性 地将 UIRefreshControl 与 UITableView 一起使用 而不是创建目标并手动调用的正常方式beginRefreshing and endRefreshing 例如
  • 如何自定义人性化Moment js日期结果

    我想用 moment js 自定义人性化的日期结果 假设我有一个约会 我想利用剩余时间 3 个月内 返回结果 moment 20141001 YYYYMMDD fromNow in 3 months 我如何自定义结果字符串 例如3 mont
  • 如何访问 Angular 2 组件和服务中的常量?

    我有一个常量文件常量 ts export const C0NST constant 我在服务中访问它一些服务 ts像这样 import C0NST from constants console log C0NST constant 但是 当
  • 我如何改进我的 opencv 程序以仅检测人行横道?

    我想检测下图中的人行横道 并用红色填充它 但程序也会检测其他东西 这是我的代码 import cv2 import numpy as np img cv2 imread zebra lane jpg cv2 imshow kep img i
  • 为什么 iOS 9 中纬度和经度显示为零?

    我必须找到当前位置并且我正在使用此代码 CLLocationCoordinate2D getLocation locationManager CLLocationManager alloc init locationManager dele
  • 一个单元格中多个条件的 Excel 匹配索引

    我有一个电子表格 它是根据 Microsoft Sharepoint 中的数据自动填充的 不幸的是 这些数据填充了我的位置列 如下所示 IND ENG USA 例如 如果该特定输入有 3 个位置 然后 我使用下拉框 通过数据验证制作 来过滤
  • 如何修复此正则表达式以便它正确替换 * (在单词之间)?

    我正在练习正则表达式 我想创建正则表达式 into em 就像使用 Markdown 一样 el el replace b g em el el replace b s g 1 em 这在大多数情况下都有效 但是 如果您将正则表达式应用于此
  • 如何将变量的值放入字符串中(将其插入字符串中)?

    我想放一个int into a string 这就是我现在正在做的事情 num 40 plot savefig hanning40 pdf problem line 我必须为几个不同的数字运行该程序 所以我想做一个循环 但是像这样插入变量不
  • For 循环除数

    对于 C 我是一个业余爱好者 但我已经收到了一项超出我知识范围的任务 任务是输入数字 n m 程序必须将其视为一个区间 在区间中检查是否存在相同指数的数字之和 编辑 15 10 18 事实证明我没有正确理解我的任务 这里是 用户输入两个数字
  • 使用 SQL JOIN 和 COUNT

    假设有两张表 一张保存用户信息 一张保存某种类型的用户记录 例如收据 用户和收据之间存在一对多的关系 检索用户 按最大收据数量排序 的最佳 SQL 方法是什么 我能想到的最好方法是使用 join 和 count 返回用户数组及其相关收据数量
  • on:click 在 Svelte 中更新 DOM 时不起作用

    The send random 当我将其添加为新添加的 DOM 中的指令时 它不起作用 for let i 0 i lt items length i data div class block received span class ite
  • Selenium WebDriver CSS 选择器帮助 - 用于选择日期

    我需要从小窗口中选择日期 下面是 html 代码示例 有人可以帮我通过 CSSSelector 或任何其他最适合执行此任务的方式选择日期吗 td class a class ui state default href 1 a td td c
  • Bootstrap - 5 列布局

    我正在尝试获得 5 列全宽布局 但找不到适合我需求的解决方案 这是我使用的代码 div class container div class row div class col lg 12 style border 1px solid red
  • 如何共享 Facebook 页面选项卡内部页面的内容?

    我正在尝试共享页面选项卡内部页面上的内容 此页面上的每个项目都有一个 赞 按钮 我想将用户重定向到该页面并通过 JS 滚动到该项目 我最好不要透露该网站的真实网址 换句话说 分享这样的事情 问题是当我尝试分享上面的网址时 Facebook
  • NSData 存储在某处

    最近我创建了一个帖子 NSData 缓存例程 但是 现在我想更具体地说明我的要求 你看 我有 轮播 这实际上是一个有 7 个图像的滚动视图 当它第一次出现时 它会从互联网加载图像并自动滚动 我的问题是 我不想每次滚动时都加载图像 幸运的是
  • 获取我的 wifi IP 地址 Android

    当手机连接wifi时 如何获取手机的ip地址 我找到了一个方法here但即使我在 wifi 下 它也会返回类似 24 182 239 255 的东西 并且我期望类似 192 168 1 10 的东西 我想要这样的东西 if you are