J'ai un problème similaire au vôtre et j'ai vérifié plusieurs solutions. Seule l'une d'entre elles fonctionne de manière fiable jusqu'à présent
if (mContext.getSystemService(Context.TELEPHONY_SERVICE) == null) {
// wifi-only device
}
Cette hypothèse est erronée. Mon Nexus 7 wifi uniquement renvoie un objet Telephony Manager.
mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
Ceci renvoie un faux sur mes deux Nexus 7. L'un d'entre eux supporte les connexions de données et l'autre est uniquement wifi.
TelephonyManager telMgr = mContext.getSystemService(Context.TELEPHONY_SERVICE)
telMgr.getPhoneType()
J'attends PHONE_TYPE_NONE
pour le nexus 7 qui est wifi-only et PHONE_TYPE_GSM
pour l'autre Nexus 7. J'obtiens PHONE_TYPE_NONE
pour les deux 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
}
Cette solution m'inquiète. SIM_STATE_UNKNOWN
est également utilisé lors des transitions d'état. Par ailleurs, certains appareils prennent en charge les connexions de données mais n'ont pas de carte SIM.
Ma solution préférée est la suivante
ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE)
if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) {
//wifi-only device
}
La seule chose qui me préoccupe, c'est de savoir s'il existe des appareils qui prennent en charge les TYPE_MOBILE_HIPRI
o TYPE_MOBILE_MMS
mais pas TYPE_MOBILE
Je soupçonne que ce n'est pas le cas.