私はあなたに似た問題を抱えていると私はいくつかのソリューションをチェックアウト。これまでのところどちらか一方のみが確実に動作します
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_HIPRI
かTYPE_MOBILE_MMS
ではなくTYPE_MOBILE
をサポートしているデバイスがある場合は
私のお気に入りのソリューションは、私を心配以下
ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE)
if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) {
//wifi-only device
}
唯一の事はありますさ。
残念ながら私の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
私のデバイスにはgsmモジュール(Wi-Fi専用デバイス)はありませんが、 'pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);'真を返します。 –