LauCass Posté(e) 4 janvier 2011 Share Posté(e) 4 janvier 2011 (modifié) Après des mois de recherche (pas à plein temps je vous rassure ^^) sur comment activer/désactiver les data, sans modifier la configuration APN, j'ai enfin trouvé une solution dont je voudrais faire profiter ceux qui seraient éventuellement dans mon cas ;) Je savais que c'était possible car des applications comme Quick Settings le font et je voulais vraiment avoir cette solution dans le widget Switcher de mon application AndroMax, mais impossible de trouver cette information sur le web, même dans le source code de Quick Settings (dispo sur: http://code.google.com), le bout de code qui fait ça a été retiré :( J'ai donc cherché du côté du source code d'Android pour comprendre comment tout cela fonctionne et après avoir buté sur le fait qu'on ne peut pas désactiver proprement la connexion data sans être une application système, comme le fait le menu système sous Froyo. En descendant plus bas j'ai donc trouvé qu'il était possible de changer l'état de la connexion au niveau de l'interface ITelephony en utilisant une permission qui elle ne nécessite pas d'être une application système. Je pense que c'est d'ailleurs ce qui est utilisé par Quick Settings car le comportement est similaire. Cette solution ne fonctionne pas sur Gingerbread car la sécurité a été renforcée, si quelqu'un connait un autre hack pour Gingerbread, j'achète ;) Voici donc un bout de code pour faire ça: import java.lang.reflect.Method; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; import com.laucass.andromax.ApnManager; // Needs the following permissions: // - "android.permission.MODIFY_PHONE_STATE" public final class DataConManager { private TelephonyManager m_telManager = null; private ConnectivityManager m_conManager = null; // ------------------------------------------------------ // ------------------------------------------------------ public DataConManager(Context context) { try { // Get phone and connectivity services m_telManager = (TelephonyManager)context.getSystemService("phone"); m_conManager = (ConnectivityManager)context.getSystemService("connectivity"); } catch (Exception e) { m_telManager = null; m_conManager = null; } } // ------------------------------------------------------ // ------------------------------------------------------ boolean switchState(boolean enable) { boolean bRes = false; // Data Connection mode (only if correctly initialized) if (m_telManager != null) { try { // Will be used to invoke hidden methods with reflection Class cTelMan = null; Method getITelephony = null; Object oTelephony = null; Class cTelephony = null; Method action = null; // Get the current object implementing ITelephony interface cTelMan = m_telManager.getClass(); getITelephony = cTelMan.getDeclaredMethod("getITelephony"); getITelephony.setAccessible(true); oTelephony = getITelephony.invoke(m_telManager); // Call the enableDataConnectivity/disableDataConnectivity method // of Telephony object cTelephony = oTelephony.getClass(); if (enable) { action = cTelephony.getMethod("enableDataConnectivity"); } else { action = cTelephony.getMethod("disableDataConnectivity"); } action.setAccessible(true); bRes = (Boolean)action.invoke(oTelephony); } catch (Exception e) { bRes = false; } } return bRes; } // ------------------------------------------------------ // ------------------------------------------------------ public boolean isEnabled() { boolean bRes = false; // Data Connection mode (only if correctly initialized) if (m_conManager != null) { try { // Get Connectivity Service state NetworkInfo netInfo = m_conManager.getNetworkInfo(0); // Data is enabled if state is CONNECTED bRes = (netInfo.getState() == NetworkInfo.State.CONNECTED); } catch (Exception e) { bRes = false; } } return bRes; } } Modifié 4 janvier 2011 par LauCass Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 4 janvier 2011 Share Posté(e) 4 janvier 2011 AH mince ça ne marche pas sur Gingerbread :( pas cool) . :( Faux espoir :'( ) merci beaucoup pour l'info en tous cas! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
vmik9 Posté(e) 28 juillet 2011 Share Posté(e) 28 juillet 2011 (modifié) Bonjour, J'avais mis ce sujet dans les favorid, dans l'espoir d'une réponse. Même s'il commence à dater, cela peut peut être intéresser du monde. J'ai re-testé "Data enabler Widget" hier, et il fait exactement ça (activer/désactiver les data, sans modifier la configuration APN). Il doit surement y avoir d'autres applications qui doivent le faire maintenant. Je suis sur un Nexus S en 2.3.4 bonne journée, Modifié 28 juillet 2011 par vmik9 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TecKnologikS Posté(e) 30 juillet 2011 Share Posté(e) 30 juillet 2011 Vendredi je vous donne ca... ou jeudi... ou qsinon decompiler l apk... Interdit de recompiler direct mais c est bien pour trouver des technique... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 15 octobre 2011 Share Posté(e) 15 octobre 2011 Toujours pas de solution propre pour le faire sous android 2.3.3. Merci google d'avoir enlevé cette possibilité de le faire proprement. :'( J'ai l'impression qu'en dehors du renommage d'apn, il n'existe aucune solution. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Olivier Posté(e) 15 février 2012 Share Posté(e) 15 février 2012 Pourtant sur le market VirtualRoamingControl arrive à couper le data sous gingerbread et ics (donc sans bidouiller les APN). https://market.android.com/details?id=com.jrhsoft.virtualroamingcontrol Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.