1

Comment faire pour obtenir DhcpInfo() (passerelle IP, masque de réseau, DNS, etc) de l'appareil Android connecté via Ethernet?Get Android DhcpInfo connecté via Ethernet

Je sais comment l'obtenir si l'appareil est connecté via Wifi et en utilisant l'autorisation de ACCESS_WIFI_STATE:

WifiManager wifi = (WifiManager) context.getSystemService(Service.WIFI_SERVICE); 
DhcpInfo dhcp = wifi.getDhcpInfo(); 

Mais je toujours pas trouvé le moyen de l'obtenir si l'appareil est connecté via Ethernet ... Merci

Répondre

2

Dans votre AndroidManifest.xml fichier

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Votre 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 { 

       } 

Sortie enter image description here

Vous ne pouvez pas arriver à savoir si vous êtes connecté via wifi ou réseau à l'aide WifiManager comme WifiManager traite uniquement avec wifi. Vous devez utiliser ConnectivityManager. J'ai mis à jour le code à nouveau où j'ai fusionné WifiManager et ConnectivityManager pour produire le résultat que vous vouliez.

+0

mais savez-vous comment obtenir l'adresse IP de la passerelle/du routeur, le masque de réseau, le réglage DNS lorsque l'appareil est connecté via Ethernet? – widhaprasa

+0

@WidhaprasaWaliprana connectivityManager.getActiveNetworkInfo(). ToString() –

+0

Je reçois: [type: ETHERNET [], état: CONNECTED/CONNECTED, raison: (non spécifié), supplémentaire: (aucun), itinérant: faux, basculement: faux , isAvailable: true, isConnectedToProvisioningNetwork: false] Je ne reçois pas l'adresse IP de la passerelle/routeur, masque de réseau, DNS – widhaprasa