有没有办法检查用户是否正在使用具有蜂窝网络连接的设备(这主要适用于平板电脑)?也就是说,智能手机配备内置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的型号,这可能吗?
提前致谢。
答案 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();