Search
Latest topics
» ABOUT PHONE CONTROL NEW RELEASE...by cykuk Yesterday at 9:55
» phone control n'envoit pas d'email pour les enregistrements audio
by LauCass Mon 17 Jun - 14:46
» Non Récupération des SMS reçus et envoyés pour certaines personnes
by LauCass Mon 17 Jun - 14:40
» How to erase all PC and PCK data and settings 100% ?
by Lala Fri 14 Jun - 14:33
» new call recording problem
by LauCass Fri 14 Jun - 14:25
» Feature wishes for Phone Control 3.3
by LauCass Fri 14 Jun - 13:58
» User Best Practice (or Feature Request): GPS Route-Tracking (e.g. in gpx format)
by LauCass Fri 14 Jun - 13:57
» Laucass support THREAD - Who wants a new version ? - DONATION THREAD -
by LauCass Fri 14 Jun - 13:52
» Viber
by LauCass Fri 14 Jun - 13:49
» record phone call - rooted phone
by LauCass Fri 14 Jun - 13:48
Activer/Désactiver les data (2G/3G) sans modifier les APN
Page 1 of 1 • Share •
Activer/Désactiver les data (2G/3G) sans modifier les APN
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.
Voici donc un bout de code pour faire ça:
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.
Voici donc un bout de code pour faire ça:
- Code:
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;
}
}

LauCass- Admin
- Messages: 1159
Date d'inscription: 2008-08-16
Age: 45
Localisation: Aubagne

Similar topics» on line booking in data
» MSQ171 Business Data Analysis
» Vermiculite Data Base Link
» Data Base of Invasive Plants in a SFG
» New Vermiculite Data Base
» MSQ171 Business Data Analysis
» Vermiculite Data Base Link
» Data Base of Invasive Plants in a SFG
» New Vermiculite Data Base
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum



