2011-09-27 230 views
5

我正試圖找到一種可靠的方式來判斷Android設備是否僅限wifi。我嘗試了幾種方法:有沒有辦法告訴如果Android設備是隻有wifi?

- 嘗試獲取設備ID(IMEI/MEID),如果我不能得到IMEI/MEID號碼,那麼我可以假設該設備是WiFi的唯一。這不起作用,因爲有些手機在進入飛行模式時不會返回設備ID。 - 嘗試閱讀TelephonyManager.getPhoneType。這不適用於我正在測試的僅支持wifi的設備返回PHONE_TYPE_GSM,而我期望它返回PHONE_TYPE_NONE。

我想知道是否有人能夠成功區分wifi專用設備和非wifi專用設備。

回答

4

您可以查詢應用程序中的系統功能以查看是否有效。

PackageManager pm = getPackageManager(); 
boolean isAPhone = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); 

如果你關心GSM/CDMA使用更具體的FEATURE_TELEPHONY_GSMFEATURE_TELEPHONY_CDMA

如果設備躺在那裏當然沒有什麼可以做的AFAIK的。

+1

不幸的是我的無線設備認爲它是一個GSM手機。 我正在考慮IMEI/MEID和飛行模式的價值結合起來,以決定 - 如果我無法檢索IMEI/MEID和飛行模式爲關閉的話,我認爲這是一個只有WiFi設備。 我檢索飛行模式的方法是使用 Settings.System.getInt(context.getContentResolver(), \t Settings.System.AIRPLANE_MODE_ON,0)!= 0; 飛行模式在我的wifi專用測試設備上返回Off。不知道它是否會在其他wifi-only設備上表現相同... – user967113

+0

在我的設備中,我沒有gsm模塊(僅限wifi設備),但'pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);'返回true。 –

2

以下解決方案更好地爲我工作:

TelephonyManager mgr = (TelephonyManager)ctx.getSystemService(Context.TELEPHONY_SERVICE); 
return mgr.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE; 

而且下面沒有像的Nook平板幾臺設備的工作:

PackageManager pm = ctx.getPackageManager(); 
return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); 
0

我有類似的問題,以你的,我檢查了幾種解決方案。其中只有一個工作可靠迄今

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_HIPRITYPE_MOBILE_MMS設備的唯一的事情,但不是TYPE_MOBILE我懷疑這是不是這樣的。

相關問題