Android:如何检测设备是否连接WiFi或WiFi+蜂窝数据网络

9

有没有一种方法可以检查用户是否正在使用具有蜂窝连接的设备(主要适用于平板电脑)?也就是说,智能手机配备了内置的Wi‑Fi和蜂窝网络(通常),但某些平板电脑只配备了Wi-Fi。我如何知道运行我的应用程序的设备类型?

我尝试了以下内容,但没有结果:

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");

问题在于两个比较都会返回真,即使是没有蜂窝网络的平板电脑。
我只需要知道设备是否有SIM卡槽(带蜂窝网络的型号),或者它是仅具备WiFi功能的型号,这可能吗?
提前致谢。
2个回答

9

7

这是我的代码摘录(目前为止它可以工作):

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();

我在一些设备上尝试了一下,似乎完美地运行了,至少对于我所需的功能来说是如此。仔细想想,这很合乎逻辑。感谢您的帮助。 - Daniel Valencia
2
如果您有有效的3G连接但数据连接关闭,则此方法将无法工作。 - Manish
也许我没有理解您的观点,但我所需要的是检测设备是否具有蜂窝数据功能,并根据此启动一个或其他活动。我尝试在您描述的情况下进行操作,似乎没有任何问题。 - Daniel Valencia
据我理解,对于丹尼尔的需求来说,拥有3G功能但关闭数据连接的设备与完全没有3G功能的设备是一样的。在我的应用程序中也是如此。 - David Jashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接