我有類似的問題,以你的,我檢查了幾種解決方案。其中只有一個工作可靠迄今
if (mContext.getSystemService(Context.TELEPHONY_SERVICE) == null) {
// wifi-only device
}
這種假設是錯誤的。我的無線Nexus 7將返回Telephony Manager對象。
mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
這將返回兩個我的Nexus 7,虛假其中一個支持數據連接,另一種是WiFi的唯一
TelephonyManager telMgr = mContext.getSystemService(Context.TELEPHONY_SERVICE)
telMgr.getPhoneType()
我希望PHONE_TYPE_NONE
爲Nexus 7是WiFi的唯一和PHONE_TYPE_GSM
對於其他的Nexus 7,我得到PHONE_TYPE_NONE
兩者的Nexus 7
if(telMgr.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
// Wifi-only device
}
else if (telMgr.getSimState() == TelephonyManager.SIM_STATE_ABSENT) {
// Device that supports data connection, but no SIM card present
}
該解決方案讓我擔心。在狀態轉換期間也使用SIM_STATE_UNKNOWN
。另外,有些設備支持數據連接,但沒有SIM卡。
我最喜歡的解決方案是以下
ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE)
if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) {
//wifi-only device
}
令我擔心的是,如果有支持TYPE_MOBILE_HIPRI
或TYPE_MOBILE_MMS
設備的唯一的事情,但不是TYPE_MOBILE
我懷疑這是不是這樣的。
不幸的是我的無線設備認爲它是一個GSM手機。 我正在考慮IMEI/MEID和飛行模式的價值結合起來,以決定 - 如果我無法檢索IMEI/MEID和飛行模式爲關閉的話,我認爲這是一個只有WiFi設備。 我檢索飛行模式的方法是使用 Settings.System.getInt(context.getContentResolver(), \t Settings.System.AIRPLANE_MODE_ON,0)!= 0; 飛行模式在我的wifi專用測試設備上返回Off。不知道它是否會在其他wifi-only設備上表現相同... – user967113
在我的設備中,我沒有gsm模塊(僅限wifi設備),但'pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);'返回true。 –