Ho un problema simile al tuo e ho verificato diverse soluzioni . Solo uno di essi funziona in modo affidabile finora
if (mContext.getSystemService(Context.TELEPHONY_SERVICE) == null) {
// wifi-only device
}
Questa ipotesi è errata. Il mio Nexus 7 wifi-only restituisce un oggetto Telephony Manager.
mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
Questo restituisce false sia sul mio Nexus 7. Uno di loro supporta connessioni dati e l'altro è solo WiFi
TelephonyManager telMgr = mContext.getSystemService(Context.TELEPHONY_SERVICE)
telMgr.getPhoneType()
mi aspetto PHONE_TYPE_NONE
per il Nexus 7 che è WiFi-only e PHONE_TYPE_GSM
per l'altro Nexus 7. ottengo PHONE_TYPE_NONE
sia per 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
}
Questa soluzione mi preoccupa. SIM_STATE_UNKNOWN
viene utilizzato anche durante le transizioni di stato. Inoltre, alcuni dispositivi supportano connessioni dati ma non hanno una scheda SIM.
La mia soluzione preferita è la seguente
ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE)
if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) {
//wifi-only device
}
L'unica cosa che mi preoccupa è se ci sono dispositivi che supportano TYPE_MOBILE_HIPRI
o TYPE_MOBILE_MMS
ma non TYPE_MOBILE
ho il sospetto che questo non è il caso.
Purtroppo il mio dispositivo solo wifi pensa che sia un telefono GSM. Sto pensando di combinare il valore di IMEI/MEID e modalità aereo per decidere - Se non riesco a recuperare IMEI/MEID e la modalità aereo è Off, quindi considero un dispositivo solo wifi. Il modo in cui recupero la modalità aereo utilizza Settings.System.getInt (context.getContentResolver(), \t Settings.System.AIRPLANE_MODE_ON, 0)! = 0; La modalità aereo ritorna disattivata sul mio dispositivo di prova solo wifi. Non sono sicuro se si comporterà lo stesso su altri dispositivi solo wifi ... – user967113
Nel mio dispositivo non ho il modulo gsm (dispositivo wifi-only), ma 'pm.hasSystemFeature (PackageManager.FEATURE_TELEPHONY);' ritorna vero –