首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过以太网连接Android DhcpInfo

通过以太网连接Android DhcpInfo
EN

Stack Overflow用户
提问于 2017-09-06 00:42:22
回答 1查看 6K关注 0票数 6

如何通过以太网连接安卓设备的DhcpInfo(网关ip、网络掩码、dns等)?

如果设备通过Wifi连接并使用ACCESS_WIFI_STATE权限,我知道如何获得它:

代码语言:javascript
复制
 WifiManager wifi = (WifiManager) context.getSystemService(Service.WIFI_SERVICE);
 DhcpInfo dhcp = wifi.getDhcpInfo();

但如果设备通过以太网连接的话我还是找不到办法.谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-09-06 01:43:16

AndroidManifest.xml文件中

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

您的代码:

代码语言:javascript
复制
    ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Service.CONNECTIVITY_SERVICE);

                /* you can print your active network via using below */
                Log.i("myNetworkType: ", connectivityManager.getActiveNetworkInfo().getTypeName());
                WifiManager wifiManager= (WifiManager) getApplicationContext().getSystemService(getApplicationContext().WIFI_SERVICE);


                Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());



                if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI) {
                    Log.i("myType ", "wifi");
                    DhcpInfo d =wifiManager.getDhcpInfo();
                    Log.i("info", d.toString()+"");
                }
                else if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_ETHERNET) {
/* there is no EthernetManager class, there is only WifiManager. so, I used this below trick to get my IP range, dns, gateway address etc */

                    Log.i("myType ", "Ethernet");
                    Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                    Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                    Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                    Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());

                }
                else {

                }

输出

您无法了解您是通过wifi连接还是使用WifiManager网络连接,因为WifiManager只处理wifi。你必须使用ConnectivityManager。我再次更新了代码,合并了WifiManagerConnectivityManager,以生成您想要的结果。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46065159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档