android - Android:以编程方式获取路线信息
问题描述
我正在向远程发送 UDP 数据包,我想知道将用于此的本地接口的 IP。在外壳中我会运行:
ip route get 192.168.1.54
它会回答类似:
192.168.1.12 dev wlan0 table local_network src 192.168.1.1
我有兴趣在哪里获得src
: 192.168.1.1
。
我可以通过这样调用来做到这exec
一点:
Runtime.getRuntime().exec("ip route get 192.168.1.54")
但这似乎不是很优雅,我不知道哪些设备支持它(它适用于其中一些设备,而其他设备则返回错误代码“1”,尽管该命令适用于adb shell
)。
有没有办法用 Android SDK 做到这一点?我看了看,ConnectivityManager
但找不到方法...
解决方案
使用 Android 的DatagramSocket应该直接为你提供源地址:
val socket = DatagramSocket()
val targetAddress = InetAddress.getByName(destHostOrIp)
socket.connect(targetAddress, port)
val local = socket.getLocalAddress()
推荐阅读
- wpf - 为什么 OverrideMetadata 没有响应?
- configuration - 德鲁伊设置错误:服务于此控制台的服务没有响应
- revit-api - 如何为 revit 插件创建安装程序?
- java - 当相同的代码在 java 中运行时,Groovy 脚本失败
- regex - 正则表达式,我怎样才能忽略部分匹配?例如,当我对两个空格之间的单词进行正则表达式时,“.co”将匹配“.com”
- python-3.x - 在熊猫数据框中分组
- git - 参数是什么
和 在 Git 和 GitHub 中是什么意思? - javascript - 为什么 Meteor autoForm afQuickField 错误不会显示错误?
- git - Git 分支人口“Git 分支与 Git 回购”
- python - 对混淆矩阵的顺序输出感到困惑