Get interface name of active network (API 21) - android

I need to get the interface name of the active network (e.g. wlan0) in API 21.
In API 23 I can do:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
Network activeNetwork = connectivityManager.getActiveNetwork();
if (activeNetwork != null)
{
LinkProperties linkProperties = connectivityManager.getLinkProperties(activeNetwork);
String name = linkProperties.getInterfaceName();
...
}
However ConnectivityManager.getActiveNetwork() is only available in API 23 and above.
Is there an acceptable solution compatible with API 21?
I have come up with the following which iterates through all networks and compares NetworkInfo.toString() (because comparing by reference or value doesn't work). It seems to work but it also feels like a huge hack:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetworkInfo != null)
{
Network[] networks = connectivityManager.getAllNetworks();
for (Network network : networks)
{
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
if (networkInfo.toString().equals(activeNetworkInfo.toString()))
{
LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
String name = linkProperties.getInterfaceName();
...
break;
}
}
}
Any suggestions appreciated.

Related

Why does the IsConnected Android function always return true, even when I turned Wi-Fi off?

I tried to check Internet Connectivity in my App to handle if there is no internet with this code. It always returns true with Wi-Fi type.
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
System.out.println( networkInfo.getTypeName());
Loading_News();
}

connMgr.getActiveNetworkInfo() return null while wifi is on

This is my code:
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
but networkInfo is always null..
What can be the cause for this odd thing?
Docs say that getActiveNetworkInfo can return null if there is no default network set. "This may return null when there is no default network."
http://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()
A better option might be to check the cell data or wifi connection.
Check your mobile connection.
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectivityManage.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
Check your wifi connection.
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

Check network connection with LocationManager in Android

I would like to check the network connection with the LocationManager in Android.
My code works fine with Galaxy SII and Version 4.0.3.
But it does not work with Galaxy S and Version 2.3.6.
The code:
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
I am connected to a Wi-Fi network for sure. But the if statement
if (!isGPSEnabled && !isNetworkEnabled)
returns true. Are there known bugs and is there a reliable way to check it?
Try this out:
//If you only want to check your Internet connection available or not
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return activeNetworkInfo != null && activeNetworkInfo.isConnected();}
Note: wifiInfo provide you status about your Wifi, still it will be there poor connection I think it will good if make HTTP reuest, for more details check link provided.
Edit:
For more information you can [refer this][1].
I am using below code in my every android project.
It will check for any active network that are used for outgoing connection.
public static boolean isNetworkAvailable(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnectedOrConnecting())
return true;
return false;
}
Use this code:
public static boolean checkConn(Context ctx)
{
ConnectivityManager conMgr = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobileInfo = conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo info = conMgr.getActiveNetworkInfo();
if(info != null && info.isConnected()) {
Log.v("NetworkInfo","Connected State");
return true;
}
return false;
}

Wifi communication only

I need to communicate over htttp or https from an android, and I need a settings for my app "wifi only". It's a restriction for the communication. How to implement such a thing? I cannot find any information on AndroidHttpClient works only with Wifi - or 3G as well, and how to restrict it.
This code will check for wifi connection.
public static boolean hasWIFIConnection(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetwork != null && wifiNetwork.isConnected())
{
return true;
}
return false;
}
I've heard about the setNetworkPreference(int preference) method in the ConnectivityManager service. Although it is poorly documented, it appears this method can be used with integer constants which represents a network type.
You can find references to such constants in the ConnectivityManager class :
TYPE_MOBILE
TYPE_WIFI
...
I would start digging this way.
EDIT :
You will need to be granted the folowing permissions :
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
try like this
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo)
{
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;}
starting from 23 getNetworkInfo is deprecated, use getActiveNetworkInfo
public boolean hasWIFIConnection()
{
ConnectivityManager connMgr = (ConnectivityManager) ContextProvider.getInstance().getApplication().getSystemService(Activity.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
if (activeNetwork != null && (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) && activeNetwork.isConnected())
{
return true;
}
return false;
}

Android - To check if the phone has a network provider

I have an android app, in that there is a particular requirement where in I need to check if the Android device has a network provider or its just WiFi enabled.
Thank You.
This should do the trick.
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnected()){
//Your code here
}
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = cm.getActiveNetworkInfo();
int type = networkInfo.getType();
String typeName = networkInfo.getTypeName();
boolean connected = networkInfo.isConnected()
networkInfo.getType() will return 0 when connected to Mobile
network or 1 when connected trough WIFI.
networkInfo.getTypeName()
will return the strings mobile or WIFI.
networkInfo.isConnected()
will tell you whether or not you have an active connection.
You should take a look at the documentation.
isProviderEnabled(LocationManager.NETWORK_PROVIDER) is what you need

Categories

Resources