如何在安卓设备上检测网络连接类型?
可以通过调用ConnectivityManager.getActiveNetworkInfo().getType()
方法来实现,但是得出的结果是否仅限于Wifi和移动网络呢?
如何在安卓设备上检测网络连接类型?
可以通过调用ConnectivityManager.getActiveNetworkInfo().getType()
方法来实现,但是得出的结果是否仅限于Wifi和移动网络呢?
String active_network = ((ConnectivityManager)
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo().getSubtypeName();
应该可以获取到网络名称
ConnectivityMonitor connectivityMonitor = ConnectivityMonitor.getInstance(this);
boolean isWiFiConnected = connectivityMonitor.isWifiConnection();
boolean isMobileConnected = connectivityMonitor.isConnected(ConnectivityManager.TYPE_MOBILE);
Log.e(TAG, "onCreate: isWiFiConnected " + isWiFiConnected);
Log.e(TAG, "onCreate: isMobileConnected " + isMobileConnected);
ConnectivityMonitor.Listener connectivityListener = new ConnectivityMonitor.Listener() {
@Override
public void onConnectivityChanged(boolean connected, @Nullable NetworkInfo networkInfo) {
Log.e(TAG, "onConnectivityChanged: connected " + connected);
Log.e(TAG, "onConnectivityChanged: networkInfo " + networkInfo);
if (networkInfo != null) {
boolean isWiFiConnected = networkInfo.getType() == NetworkCapabilities.TRANSPORT_WIFI;
boolean isMobileConnected = networkInfo.getType() == NetworkCapabilities.TRANSPORT_CELLULAR;
Log.e(TAG, "onConnectivityChanged: isWiFiConnected " + isWiFiConnected);
Log.e(TAG, "onConnectivityChanged: isMobileConnected " + isMobileConnected);
}
}
};
connectivityMonitor.addListener(connectivityListener);
fun getConnectionInfo(): ConnectionInfo {
val cm = appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return if (cm.activeNetwork == null) {
ConnectionInfo.NO_CONNECTION
} else {
if (cm.isActiveNetworkMetered) {
ConnectionInfo.MOBILE
} else {
ConnectionInfo.WI_FI
}
}
}
/**
* 0 = no connection info available
* 1 = mobile data
* 2 = wifi
* 3 = vpn
* @receiver Context
* @return Int
*/
fun Context.getConnectionType(): Int {
var result = 0 // Returns connection type. 0: none; 1: mobile data; 2: wifi; 3: vpn
val cm = connectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cm?.run {
getNetworkCapabilities(cm.activeNetwork)?.run {
when {
hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
result = 2
}
hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
result = 1
}
hasTransport(NetworkCapabilities.TRANSPORT_VPN) -> {
result = 3
}
}
}
}
} else {
cm?.run {
activeNetworkInfo?.run {
when (type) {
ConnectivityManager.TYPE_WIFI -> {
result = 2
}
ConnectivityManager.TYPE_MOBILE -> {
result = 1
}
ConnectivityManager.TYPE_VPN -> {
result = 3
}
}
}
}
}
return result
}