Android:如何检测设备是WiFi还是WiFi + Cellular

时间:2013-06-06 18:37:35

标签: android networking network-programming android-wifi cellular-network

有没有办法检查用户是否正在使用具有蜂窝网络连接的设备(这主要适用于平板电脑)?也就是说,智能手机配备内置Wi-Fi和Cellular(通常),但有些平板电脑只配备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");

问题是两个比较总是返回true,即使它是没有细胞的平板电脑。

我只需要知道该设备是否有SIM卡插槽(带蜂窝电话的型号),或者它是只有WiFi的型号,这可能吗?

提前致谢。

2 个答案:

答案 0 :(得分:8)

如果目标是确定是否计量连接,则应致电ConnectivityManager.isActiveNetworkMetered(),或者如果需要较旧的设备支持,则ConnectivityManagerCompat.isActiveNetworkMetered()

有关对不同连接类型做出反应的背景信息,请参阅Managing Network Usage(尽管请注意该文档' s problem of not using isActiveNetworkMetered())。

答案 1 :(得分: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();