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 的型号,这可能吗?

提前致谢。

4

2 回答 2

9

如果目标是确定连接是否按流量计费,则应调用ConnectivityManager.isActiveNetworkMetered(),或者如果需要旧设备支持,则应调用 ConnectivityManagerCompat.isActiveNetworkMetered ()

有关对不同连接类型做出反应的背景,请参阅管理网络使用(尽管请注意该文档的不使用 isActiveNetworkMetered() 的问题)。

于 2014-12-02T17:06:59.437 回答
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();
于 2013-06-06T18:41:09.250 回答