Android获取Wifi网关

news2024/11/14 13:38:34

公司有这样一个应用场景:有一台球机设备,是Android系统的,它不像手机,它没有触摸屏幕,所以我们对球机的操作很不方便,于是我们搞这样一个设置:点击球机电源键5次分享出一个热点,然后我们用手机连接上这个热点,这样手机和球机就有了连接,我们想通过手机来修改球机的设置,这需要在球机上运行一个Web服务器,以便提供一些API接口来让手机访问,访问不同的API修改不同的设置。现在的问题是,手机连接热点之后,我们要访问球机时需要知道球的ip地址是多少,而且球机分享的热点的本机ip地址每次都不一样,如何通过代码在手机上获取到球机的ip地址,以便进行http通信。解决方案如下:

  1. 添加权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  2. 代码

    fun getWifiRouteIpAddress(): String? {
        val cm = (getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager)
        val activeNetwork: Network = cm.activeNetwork ?: return null
        val networkCapabilities: NetworkCapabilities = cm.getNetworkCapabilities(activeNetwork) ?: return null
        if (!networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) return null
        val linkProperties: LinkProperties = cm.getLinkProperties(cm.activeNetwork) ?: return null
        return linkProperties.routes.first { it.isDefaultRoute }?.gateway?.hostAddress
    }
    

如上代码可以获取到连接的wifi的路由ip地址,它和wifi的网关是一样的,通过该ip地址,手机就能访问到球机。我们公司的wifi是192.168.1.xxx网段的,如果连接上公司的wifi,拿到的网关地址为:192.168.1.1

另外:linkProperties.dhcpServerAddress也可以获取到球机的dhcp服务器地址,它也是和网关一样的,但是这个函数是Android 11才出的api,在低版本不可用。linkProperties.dnsServers拿到的是dns服务器的地址,和网关也是一样的,这个函数在Android 5.0的时候就出了。不知道是否所有的Android设备分享的热点都会把 dhcp服务器地址 和 dns服务器地址都设置成和网关一样,大家如果要用这两个函数的话可以多找几台设备分享热点,然后连接这些热点看获取的 dhcp 和 dns 地址是否都和网关一样。在Windows系统上,通过查看网络状态可以看到这些信息,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们可能通过路由、dhcp、dns来获取网关地址,奇怪的是Android官网为什么不提供一个直接获取网关的api呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高德地图已达成全球最大规模车道级导航覆盖

近日&#xff0c;高德地图宣布旗下基于北斗卫星导航系统、深度学习模型、惯性导航、泛在信号等前沿技术研发的车道级导航服务&#xff0c;截止目前已支持在国内99%以上的城市和乡镇道路使用。 这意味着即日起&#xff0c;用户在驾车导航时&#xff0c;无论是在城市还是乡镇&am…

AI大模型专题报告:AI大模型及应用加速落地,持续带动算力产业链发展

今天分享的AI系列深度研究报告&#xff1a;《AI大模型专题报告&#xff1a;AI大模型及应用加速落地&#xff0c;持续带动算力产业链发展》。 &#xff08;报告出品方&#xff1a;长城证券&#xff09; 报告共计&#xff1a;23页 1.行业观点 在 TMT 各子板块&#xff1a;电子…

算法设计复习题

一、选择 1.算法要对异常情况进行适当的处理&#xff0c;就是算法的&#xff08;&#xff09;。 A、正确性 B、可用性 C、健壮性 D、可行性 2.&#xff08; &#xff09;指的是算法中描述的操作都可以通过已经实现的基本操作运算有限次实现。 A、可靠性 B、正确性 C、有效性 …

什么是shell?

系统内核是操作系统的基本组成部分&#xff0c;它负责管理系统的硬件和软件资源&#xff0c;并提供一组基本的系统服务。内核是操作系统的核心&#xff0c;控制着计算机的所有主要功能&#xff0c;包括内存管理、进程管理、设备驱动程序、系统调用和安全防护等。内核在计算机中…

python实战教学之python版“张万森,好久不见”

前言 WINTER IS COMING 最近《一闪一闪亮星星》的电影在火热预售中&#xff0c;家人们抢到票了嘛&#xff0c;前两天小编写了一篇“张万森&#xff0c;下雪了”的文章后&#xff0c;收到了不少小伙伴的反馈&#xff1a;“代码的运行结果只有文字&#xff0c;没有雪花啊”&#…

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足

目录 前言 出现的问题: 解决方法&#xff1a; 编译安装&#xff1a; 极速安装 其他 我的其他博客 前言 说实话&#xff0c;本人也就是个穷学生买不起啥大的服务器啥的&#xff0c;整了个2核 2内存的服务器 用宝塔按mysql5.5是没问题的&#xff0c;一切换8.0就提醒内存不足…

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成&#xff08;RAG&#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似&#xff0c;例如&am…

OpenAI 在中国申请 GPT-6、GPT-7 商标;Google 推迟发布 OpenAI 竞品 Gemini 至明年 1 月【无际Ai资讯】

天眼查 app 显示&#xff0c;近日&#xff0c;欧爱运营有限责任公司&#xff08;OPENAI OPCO&#xff0c;LLC&#xff09;申请多枚「GPT-6」「GPT-7」商标&#xff0c;国际分类为科学仪器、网站服务&#xff0c;当前商标状态均为等待实质审查。 此前 OpenAI CEO Sam Altman 在接…

若依源码分析

一.登录 1.1 生成验证码 基本思路 后端生成一个表达式,74?11 74?转成图片,传到前端进行展示 将结果11存入redis 前端代码实现: 请求后端地址:http://localhost/dev-api/captchaImage,通过反向代理解决前后端跨域问题,将请求路径变为:http://localhost:8080/captchaImag…

音频接口芯片GC8416,GC1809,GC8418的芯片描述与比较分析

GC8416 192KHZ数字音频接收芯片 工作电流在32~192之间&#xff0c;可替代CS8416/CIRRUS LOGIC GC1809&#xff0c;GC8418都是24位&#xff0c;192KHZ音频接收芯片 工作电流最高可达192 可替代MS8413

大数据驱动下的人口普查:新时代下的新变革

人口普查数据大屏&#xff0c;是指一种通过大屏幕显示人口普查数据的设备&#xff0c;可以将人口普查数据以可视化的形式呈现出来&#xff0c;为决策者提供直观、准确的人口数据。这种大屏幕的出现&#xff0c;让人口普查数据的利用变得更加高效、便捷。 如果您需要制作一张直观…

Redis7--基础篇8(集群cluster)

1. 集群&#xff08;cluster&#xff09;介绍 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集 的一部分&#xff0c;这就是Redis的集群&#xff0c;其作用是提供在多个…

Android工程怎么调用C/C++代码(保姆级别,每一步截图+讲解)?

文章目录 背景新建工程拷贝/编写C/C代码编写CMake配置文件写Java代码加载动态/静态库java转换c&#xff0c;c转javanative层打印日志Android去调用Java层的native方法对外提供.so/.a库 jar包检查APK里面是否已经被正常包含.so/.a完成 背景 突然想起做了这么久的JNI开发&#…

(新手必看)自定义数据传输通信协议+STM32代码详解

前言 本篇博客主要学习和了解一些单片机协议的格式&#xff0c;在对传输大数据或者要求准确性的时候&#xff0c;都需要通过协议来发送接收&#xff0c;下面通过了解协议的基本构成和代码来分析和实现协议的发送和接收。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索&#xff08;二&#xff09;&#xff1a;贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下&#xff0c;寻找从…

【教3妹学编程-算法题】下一个更大元素 IV

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

计算机网络:应用层(一)

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

STM32单片机项目实例:基于TouchGFX的智能手表设计(4)LPBAM的应用

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;4&#xff09;LPBAM的应用 目录 一、概述 二、LPBAM简介 2.1 支持 LPBAM 的外设 三、LPBAM硬件机制 3.1 电源和时钟架构 3.2 速度限制 3.3 LPGPIO_IOToggle实验 一、概述 STM32U5 系列微控制器基…

星际飞船大战

欢迎来到程序小院 星际飞船大战 玩法&#xff1a;滑动鼠标控制方向&#xff0c;点击鼠标左键射击&#xff0c;生命值100分&#xff0c;被敌船击中减去20&#xff0c; 5次生命复活机会&#xff0c;统计分数&#xff0c;快去星际飞船大战吧^^。开始游戏https://www.ormcc.com/pl…

深度解读 Cascades 查询优化器

数据库中查询优化器是数据库的核心组件&#xff0c;其决定着 SQL 查询的性能。Cascades 优化器是 Goetz 在 volcano optimizer generator 的基础上优化之后诞生的一个搜索框架。 本期技术贴将带大家了解 Cascades 查询优化器。首先介绍 SQL 查询优化器&#xff0c;接着分析查询…