2011-09-27 13 views
5

私はAndroid搭載端末が無線LAN専用かどうかを確認する信頼できる方法を見つけようとしています。Android搭載端末がWi-Fi専用かどうかを確認する方法はありますか?

- IMEI/MEID番号を取得できない場合、デバイスID(IMEI/MEID)を取得しようとすると、デバイスが無線LAN専用であると見なすことができます。これは、一部の電話機がフライトモードに入ったときにデバイスIDを返さないため動作しません。 - TelephonyManager.getPhoneTypeを参照してください。これは、私がPHONE_TYPE_NONEを返すと期待している間に、私がテストしているWiFi専用デバイスがPHONE_TYPE_GSMを返すようには機能しません。

誰かがWi-Fi専用端末とWi-Fi専用端末を区別できたのだろうかと思います。

答えて

4

あなたのアプリのシステム機能を照会して、その機能が動作しているかどうかを確認できます。

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

あなたはGSM/CDMAを気にしている場合は、FEATURE_TELEPHONY_GSMまたはFEATURE_TELEPHONY_CDMAより具体的なを使用しています。

もしデバイスが横たわっていれば、あまり面白くないことがあります。解決後

+1

残念ながら私のWi-Fiのみのデバイスは、GSM携帯電話だと思っています。 私はIMEI/MEIDと飛行機モードの値を組み合わせて計算することを検討しています - IMEI/MEIDを取得できず飛行機モードがオフの場合は、Wi-Fi専用デバイスと見なします。 飛行機モードを取得する方法は、 Settings.System.getInt(context.getContentResolver()、 \t Settings.System.AIRPLANE_MODE_ON、0)を使用しています。 飛行機モードは、Wi-Fi専用のテストデバイスでオフに戻ります。他のWi-Fi専用デバイスでも同じように動作するかどうかわかりません... – user967113

+0

私のデバイスにはgsmモジュール(Wi-Fi専用デバイス)はありませんが、 'pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);'真を返します。 –

2

は、より良い私の仕事:

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

そして次はヌークのタブレットのようないくつかのデバイス上で動作しませんでした:

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

私はあなたに似た問題を抱えていると私はいくつかのソリューションをチェックアウト。これまでのところどちらか一方のみが確実に動作します

if (mContext.getSystemService(Context.TELEPHONY_SERVICE) == null) { 
    // wifi-only device 
} 

この仮定は間違っています。 Wi-Fi専用のNexus 7は、テレフォニーマネージャオブジェクトを返します。

mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 

これは、両方の私のネクサス上でそれらの7つをfalseを返すことは、私は無線LANのみであるネクサス7のためPHONE_TYPE_NONEを期待するデータ接続をサポートし、他の一つは無線LANのみの

TelephonyManager telMgr = mContext.getSystemService(Context.TELEPHONY_SERVICE) 
telMgr.getPhoneType() 

で、他のネクサス7のためのPHONE_TYPE_GSMは、私はこのソリューションは、私を心配両方のネクサス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 
} 

ためPHONE_TYPE_NONEを取得します。 SIM_STATE_UNKNOWNは、状態遷移中にも使用されます。また、一部のデバイスはデータ接続をサポートしていますが、SIMカードはありません。私はこれがそうでない疑いTYPE_MOBILE_HIPRITYPE_MOBILE_MMSではなくTYPE_MOBILEをサポートしているデバイスがある場合は

私のお気に入りのソリューションは、私を心配以下

ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) 
if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) { 
    //wifi-only device 
} 

唯一の事はありますさ。

関連する問題