Android: Cómo detectar si un dispositivo es WiFi o WiFi + Celular

¿Hay una manera de comprobar si el usuario está utilizando un dispositivo (esto se aplica principalmente a las tabletas) con conexión celular ?. Es decir, los teléfonos inteligentes viene con built-in Wi-Fi y Cellular (en general), pero algunas tabletas sólo viene con Wi-Fi. ¿Cómo puedo saber qué tipo de dispositivo está ejecutando mi aplicación?

He intentado lo siguiente sin resultados:

cell = ConnectivityManager.isNetworkTypeValid(ConnectivityManager.TYPE_MOBILE); wifi = ConnectivityManager.isNetworkTypeValid(ConnectivityManager.TYPE_WIFI); if (cell) tv_1.setText("The tablet has cellular"); else tv_1.setText("The tablet does not have cellular"); if (wifi) tv_2.setText("The tablet has wifi"); else tv_2.setText("The tablet does not have wifi"); 

El problema es que ambas comparaciones siempre devuelven true, incluso si se trata de una tableta que no tiene celular.

Sólo necesito saber si el dispositivo tiene una ranura para tarjeta SIM (modelo con celular) o es un modelo que sólo tiene WiFi, ¿es eso posible?

Gracias por adelantado.

Aquí hay un extracto de mi código (funciona hasta ahora):

 ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mEthernet = connManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET); NetworkInfo m3G = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (mWifi!=null) isOnWifi = mWifi.isConnected(); if (mEthernet!=null) isOnEthernet = mEthernet.isConnected(); if (m3G!=null) is3G = m3G.isConnected(); 

Si el objetivo es determinar si la conexión se mide, debe llamar a ConnectivityManager.isActiveNetworkMetered () , o si se requiere soporte para dispositivos antiguos, ConnectivityManagerCompat.isActiveNetworkMetered () .

Para obtener más información sobre cómo reaccionar a diversos tipos de conexión, consulte Administración de uso de la red (aunque tenga en cuenta el problema de la documentación de no utilizar isActiveNetworkMetered () ).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.