2013-06-10 2 views
0

J'utilise le code ci-dessous pour activer/désactiver le réseau mobile.Activer/désactiver la connexion réseau mobile par programme dans android jelly bean

 final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     final Class conmanClass = Class.forName(conman.getClass().getName()); 
     final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
     iConnectivityManagerField.setAccessible(true); 
     final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
     final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
     final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
     setMobileDataEnabledMethod.setAccessible(true); 
     setMobileDataEnabledMethod.invoke(iConnectivityManager, ON); 

J'ai testé ce code avec Android 2.3.X, 4.0.X et 4.1.X. Il fonctionne avec seulement 2.3.X et 4.0.X mais a échoué avec 4.1.X.

Je reçois l'exception java.lang.NoSuchFieldException: mService lors d'un test avec Android Jelly Bean.

Existe-t-il une autre solution à mon problème? J'ai ajouté toutes les autorisations requises dans le fichier manifeste.

+0

Votre téléphone n'a-t-il pas besoin d'être enraciné pour cela? –

+0

Je ne sais pas si vous avez besoin d'autres réseaux ou si vous voulez travailler en mode non connecté, mais avez-vous pensé au mode avion? – lithos35

Répondre

2
try 
       { 
    dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); 
       } 
       catch (SecurityException e1) 
       { 

       e1.printStackTrace(); 
       } 
       catch (NoSuchMethodException e1) 
       { 

       e1.printStackTrace(); 
       } 

       dataMtd.setAccessible(true); 
       try { 

       dataMtd.invoke(conm,true); 



       } 
} 

Où datamtd est une méthode .. Essayez avec mon ami. Je l'ai trouvé réussi dans mon application précédente. J'espère que cela peut vous aider. Désolé si non, puisque je n'ai pas beaucoup d'expérience. :)

+0

pourquoi ne pouvez-vous pas dataMtd.setAccessible (true); ** en dehors du bloc try catch? Si getDeclaredMethod déclenche une exception, dataMtd sera nul et vous planterez – njzk2

+0

J'ai déjà essayé et l'application est maintenant disponible dans le Play Store mon ami. C'est un morceau de code de celui-là. –

+0

Je ne dis pas que ça ne marche pas, je dis juste que ce n'est pas logique/cohérent. vous attrapez une exception ** parce que ** il peut y en avoir une, donc vous devriez considérer la possibilité complètement. – njzk2

Questions connexes