5 votes

Existe-t-il un moyen de savoir si un appareil Android est équipé d'un wifi ?

J'essaie de trouver un moyen fiable de savoir si un appareil Android est wifi uniquement. J'ai essayé plusieurs méthodes :

-- Essayer d'obtenir l'ID de l'appareil (IMEI/MEID), si je ne peux pas obtenir le numéro IMEI/MEID, alors je peux supposer que l'appareil est wifi-only. Cela ne fonctionne pas car certains téléphones ne renvoient pas d'ID d'appareil lorsqu'ils sont mis en mode vol. -- Essayez de lire TelephonyManager.getPhoneType. Cela ne fonctionne pas non plus car l'appareil wifi-only que je teste renvoie PHONE_TYPE_GSM, alors que je m'attends à ce qu'il renvoie PHONE_TYPE_NONE.

Je me demande si quelqu'un a réussi à distinguer les appareils wifi-only de ceux qui ne le sont pas.

4voto

Jens Points 9062

Vous pouvez interroger les fonctionnalités du système dans votre application pour voir si cela fonctionne.

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

Si vous vous intéressez au GSM/CDMA, utilisez l'option plus spécifique FEATURE_TELEPHONY_GSM o FEATURE_TELEPHONY_CDMA .

Si l'appareil est menteur, il n'y a bien sûr pas grand-chose à faire.

2voto

Mobistry Points 2902

La solution suivante a mieux fonctionné pour moi :

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

Et la suite n'a pas fonctionné sur quelques appareils comme la Nook Tablet :

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

0voto

user3826250 Points 1

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X