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

Dan*_*les 9 networking android network-programming cellular-network android-wifi

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

问题是两个比较总是返回真实,即使它是一个没有蜂窝的平板电脑.

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

提前致谢.

Edw*_*rey 8

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

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


Dav*_*shi 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();
Run Code Online (Sandbox Code Playgroud)

  • 如果您有有效的3G连接但数据连接已关闭,则无法使用此功能. (2认同)