Android可以快速找到网络上的所有本地设备

Android可以快速找到网络上的所有本地设备,android,Android,我正在制作一个Android应用程序,它需要能够查看本地网络设备(名称或ip)。目前我可以扫描网络并找到设备的本地IP。然而,当用户在网络上搜索时,需要花费很长时间才能看到黑屏加载 以下是我当前使用的代码: private ArrayList<String> scanSubNet(String subnet) { ArrayList<String> hosts = new ArrayList<String>(); InetAddres

我正在制作一个Android应用程序,它需要能够查看本地网络设备(名称或ip)。目前我可以扫描网络并找到设备的本地IP。然而,当用户在网络上搜索时,需要花费很长时间才能看到黑屏加载

以下是我当前使用的代码:

    private ArrayList<String> scanSubNet(String subnet) {
    ArrayList<String> hosts = new ArrayList<String>();

    InetAddress inetAddress = null;
    for (int i = 1; i < 100; i++) {
        try {
            inetAddress = InetAddress.getByName(subnet + String.valueOf(i));
            if (inetAddress.isReachable(1000)) {
                hosts.add(inetAddress.getHostName());
                Log.d("ERRORID", inetAddress.getHostName());
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return hosts;
}
专用阵列列表扫描子网(字符串子网){
ArrayList hosts=新的ArrayList();
InetAddress InetAddress=null;
对于(int i=1;i<100;i++){
试一试{
inetAddress=inetAddress.getByName(子网+字符串.valueOf(i));
if(inetAddress.isReachable(1000)){
添加(inetAddress.getHostName());
Log.d(“ERRORID”,inetAddress.getHostName());
}
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
返回主机;
}

必须有一种更快的方法来搜索网络设备,对吗?

请在AsyncTask中检查并执行任务。当新节点加入本地网络时,请不断更新UI。

在尝试实现其示例时,行“mDiscoveryListener=new NsdManager.DiscoveryListener()”需要抑制器。这是因为没有吃果冻豆吗?如果是,这是否意味着我不能使用此解决方案?是的,此API是在API级别16中添加的。这就是Jellybean。我将把API级别改为min 16。非常感谢你的帮助。