当前位置: 首页 > 知识库问答 >
问题:

从代码获取Android WiFi“net.hostname”

白驰
2023-03-14

当Android设备连接到wifi AP时,它会用如下名称来标识自己:

android_cc1dec12345e6054

如何从 Android 应用中获取该字符串?不是为了改变它,只是为了读出。

编辑:
这是我的路由器Web界面的屏幕截图,显示了所有已连接设备的列表。请注意列表中的两个Android设备 - 如何从设备上运行的Java代码中读取该字符串?

共有3个答案

姚善
2023-03-14

使用NetworkInterface对象枚举接口并从接口的InetAddress中获取规范主机名。由于您想要wifi名称,作为快捷方式,您可以直接查询wlan0,如果失败,您可以像这样枚举它们:

import android.test.InstrumentationTestCase;
import android.util.Log;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class NetworkInterfaceTest extends InstrumentationTestCase {
    private static final String TAG = NetworkInterfaceTest.class.getSimpleName();
    public void testNetworkName() throws Exception {
        Enumeration<NetworkInterface> it_ni = NetworkInterface.getNetworkInterfaces();
        while (it_ni.hasMoreElements()) {
            NetworkInterface ni = it_ni.nextElement();
            Enumeration<InetAddress> it_ia = ni.getInetAddresses();
            if (it_ia.hasMoreElements()) {
                Log.i(TAG, "++ NI:   " + ni.getDisplayName());
                while (it_ia.hasMoreElements()) {
                    InetAddress ia = it_ia.nextElement();
                    Log.i(TAG, "-- IA:   " + ia.getCanonicalHostName());
                    Log.i(TAG, "-- host: " + ia.getHostAddress());
                }
            }
        }
    }
}

这将为您提供如下输出:

TestRunner﹕ started: testNetworkName
++ NI:   lo
-- IA:   ::1%1
-- host: ::1%1
-- IA:   localhost
-- host: 127.0.0.1
++ NI:   p2p0
-- IA:   fe80::1234:1234:1234:1234%p2p0
-- host: fe80::1234:1234:1234:1234%p2p0
++ NI:   wlan0
-- IA:   fe80::1234:1234:1234:1234%wlan0
-- host: fe80::1234:1234:1234:1234%wlan0
-- IA:   android-1234567812345678   <--- right here
-- host: 192.168.1.234

提示:如果<code>InetAddress.getCanonicalHostName().equals(inetaddle.getHostAddress())

韦知
2023-03-14

我不知道这是否有帮助,但我走了。

在unix shell中(您可以在Google Play中下载任何终端应用程序),您可以通过键入以下命令获得主机名

getprop net.hostname

当然这不是你想要的...但是...另一方面,这里是关于如何从java执行unix命令的信息。也许把这两者结合起来,你就能得到你想要的。

赵珂
2023-03-14

基于@Merlevede的回答,这里有一个快速和肮脏的方式来获得财产。这是一个私有的API,所以可能会有变化,但至少从Android 1.5开始这段代码就没有修改过,所以使用起来可能是安全的。

import android.os.Build;
import java.lang.reflect.Method;

/**
 * Retrieves the net.hostname system property
 * @param defValue the value to be returned if the hostname could
 * not be resolved
 */
public static String getHostName(String defValue) {
    try {
        Method getString = Build.class.getDeclaredMethod("getString", String.class);
        getString.setAccessible(true);
        return getString.invoke(null, "net.hostname").toString();
    } catch (Exception ex) {
        return defValue;
    }
}
 类似资料:
  • 问题内容: 我在Java应用程序中使用该类,并且需要能够获取HTTP状态代码。如果使用它,则可以在其中看到HTTP状态代码。我还有其他功能可以获取int或String的HTTP状态代码吗? 谢谢一群! 问题答案: 使用,它返回一个包含状态码,协议版本和“原因”的对象。

  • 我们采用GitLab作为项目代码释放平台,所有仓库源码及更新获取都需通过GitLab同步。 gitlab代码入口为:https://gitlab.com/nationalchip/vsp_sdk 一、注册GitLab账号 GitLab登录链接 GitLab账号注册可能需要翻墙,所以不能打开注册链接的,我们建议通过GitHab账号登录。 GitHub注册链接 没有GitHub账号的话,先通过下面链接

  • 参考快速上手指南的代码获取章节: gitlab代码获取章节

  • 有两种途径获取: 代码托管到阿里云[https://code.aliyun.com/]上,需要去注册一个账号,把账号告知我们的FAE,我们给你释放 pull code 的权限。

  • 问题内容: 如何从网站获取HTML代码,进行保存并通过LINQ表达式查找一些文本? 我正在使用以下代码来获取网页的来源: 如何在网页源中的div中查找文本? 问题答案: 从网站获取HTML代码。您可以使用这样的代码。 这将为您提供从网站返回的 HTML 代码。但是通过 LINQ 查找文本并不是那么容易。也许使用正则表达式会更好,但不能与 HTML 代码一起很好地使用

  • 3.4. 获取代码 以下命令会创建一个go目录。切换到相应目录,并且确保当前位置不存在go目录,运行命令: $ hg clone -r release https://go.googlecode.com/hg/ go