I wondering whether exist way to get result of ifconfig and route commands result programmatically in Android device? Can I do this in non rooted device?
Advertisement
Answer
In your AndroidManifest.xml file
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Your code:
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 { }
You can’t reach to know whether you are connected via wifi or network using WifiManager
as WifiManager
only deals with wifi. You have to use ConnectivityManager
. I updated the code again where I merged WifiManager
and ConnectivityManager
to produce the result that you wanted.