Selon la documentation Android de WifiManager, vous:

Obtenez une instance de cette classe en appelant Context.getSystemService (Context.WIFI_SERVICE).


Dans les appels Fragment et MainActivity :

WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);

Renvoie l'erreur:

La méthode non statique 'getSystemService (java.lang.String)' ne peut pas être référencée à partir d'un contexte statique.


Dans les appels MainActivity :

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

Fonctionne mais, pourquoi la documentation indique-t-elle le contraire?

Quelqu'un peut-il m'aider à comprendre pourquoi nous n'avons plus besoin de préfixer Context à getSystemService() même si cette méthode appartient à la classe Context. Aussi pourquoi diffusons-nous sur (WifiManager)? Cette explication m'aidera énormément car ce n'est pas la première fois que ce qui fonctionne diffère de ce que prescrit la documentation.


Dans Fragment appelant le même:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

Renvoie l'erreur:

Impossible de résoudre la méthode 'getSystemService (java.lang.String)'


J'aimerais pouvoir obtenir l'instance dans le fragment en raison du problème que j'ai décrit dans mon dernier post


2
young_souvlaki 23 déc. 2015 à 20:25

2 réponses

Meilleure réponse

Utilisez la méthode getActivity() pour appeler la méthode getSystemService de Fragment comme:

WifiManager wifiManager = (WifiManager) getActivity().
                         getSystemService(Context.WIFI_SERVICE);

Parce que la méthode getSystemService provient de la classe Context au lieu de Fragment

7
ρяσѕρєя K 23 déc. 2015 à 17:27

Attention pour ceux qui recherchent la solution pour un Activity et non un Fragment, WifiManager doit être récupéré en utilisant:

WifiManager wifiManager = mContext.getApplicationContext()
                                  .getSystemService(Context.WIFI_SERVICE);

Tenir WifiManager par rapport à un contexte autre que celui au niveau de l'application entraînera des fuites de mémoire.

À partir de Documentation pour les développeurs Android:

Sur les versions antérieures à Build.VERSION_CODES.N, cet objet ne doit être obtenu d'un Context#getApplicationContext(), et non d'aucun autre contexte dérivé pour éviter les fuites de mémoire dans l'appel processus.

0
Bryan W 29 déc. 2019 à 00:31