Avevo una soluzione per abilitare e disabilitare i dati che funzionavano correttamente nelle API 8 e 10, ma quel codice non era compatibile con ICS, ho bisogno di una soluzione globale, quindi che lo stesso codice deve essere compatibile dall'API 8 fino alle versioni del sistema operativo Android.Abilita/disabilita dati mobili (GPRS) utilizzando il codice
risposta
utilizzare il seguente metodo. Funzionerà con tutte le versioni di Android.
int bv = Build.VERSION.SDK_INT;
boolean turnOnDataConnection(boolean ON,Context context)
{
try{
if(bv == Build.VERSION_CODES.FROYO)
{
Method dataConnSwitchmethod;
Class<?> telephonyManagerClass;
Object ITelephonyStub;
Class<?> ITelephonyClass;
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());
Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());
if (ON) {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("enableDataConnectivity");
} else {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("disableDataConnectivity");
}
dataConnSwitchmethod.setAccessible(true);
dataConnSwitchmethod.invoke(ITelephonyStub);
}
else
{
//log.i("App running on Ginger bread+");
final ConnectivityManager conman = (ConnectivityManager) context.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);
}
return true;
}catch(Exception e){
Log.e(TAG,"error turning on/off data");
return false;
}
}
Autorizzazioni necessarie:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
UPDATE:
A partire da Android L questo funziona solo per le applicazioni di sistema
Questo codice in esecuzione in Android Gingerbread e versioni successive:
private void setMobileDataEnabled(Context context, boolean enabled) {
final ConnectivityManager conman = (ConnectivityManager) context.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, enabled);
}
NOTA: U necessario aggiungere questa riga sotto IN ANDROIDMAINFEST.XML
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
Grazie mille anche per il tuo contributo :) –
È inoltre necessario che il permesso:
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
private static boolean enableMobileData(Context context, boolean enable) {
boolean bool = true;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
Class[] arrayOfClass = new Class[1];
arrayOfClass[0] = Boolean.TYPE;
Method enableDataMethod = ConnectivityManager.class.getMethod("setMobileDataEnabled", arrayOfClass);
DailySchedulerLog.v("Method enableDataMethod = %s", enableDataMethod.getName());
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = Boolean.valueOf(enable);
enableDataMethod.invoke(cm, arrayOfObject);
return bool;
} catch (Exception localException) {
// while (true) {
DailySchedulerLog.d("Exception !!!!!!!!! loops");
return bool = false;
// }
}
}
questo snipcode funziona con il mio caso. Plz, aggiungi permessi per cambiare rete
Ha funzionato come un fascino piacevole. –
- 1. Indirizzi IP 3G/Edge/GPRS e geocodifica
- 2. Ottenere la cronologia di utilizzo dei dati mobili utilizzando NetworkStatsManager
- 3. dati delle applicazioni mobili gestione
- 4. Come verificare se Android "Dati mobili" è
- 5. Invia richiesta POST su dati mobili
- 6. Come seminare i dati utilizzando il codice EntityFramework prima Migrazioni
- 7. Medie mobili su più colonne - Dati raggruppati
- 8. Utilizzare lo scudo Arduino GSM/GPRS per inviare dati al servizio Web
- 9. Come verificare la disponibilità GPRS prima di inviare dati tramite HttpConnection
- 10. Trascinare la selezione sui dispositivi mobili utilizzando un codice che traduce l'evento (codice incluso), ma gli eventi normali non funzionano
- 11. Rilevamento e modifica della connessione dati programmaticamente (GPRS/UMTS) su Android
- 12. Rimuovere il binding in WPF utilizzando il codice
- 13. Come forzare una connessione GPRS invece di 3G o Wifi?
- 14. Ripeti ggplot utilizzando dati diversi senza digitare l'intero codice
- 15. Invia dati tramite Wi-Fi (senza Internet) quando i dati mobili su
- 16. Ottieni la potenza del segnale di WIFI e dati mobili
- 17. rileva la densità dello schermo utilizzando javascript sui dispositivi mobili?
- 18. Come nascondere un NSToolbarItem utilizzando il codice?
- 19. Utilizzando tortoiseSVN, come si codifica il codice?
- 20. Come modificare il codice sorgente utilizzando Roslyn?
- 21. Pubblica distribuzione Web utilizzando il codice VS
- 22. compilare il codice JavaFX utilizzando ANT
- 23. Scarica l'immagine dall'URL utilizzando il codice php?
- 24. Avvia azione photoshop utilizzando il codice
- 25. TcpListener: ascolto su tutti gli indirizzi, incluso l'indirizzo IP GPRS
- 26. Soluzione di archiviazione dati Javascript utilizzando PhoneGap
- 27. CSRF nelle applicazioni mobili
- 28. Diagrammi a barre mobili
- 29. Rimanere su piattaforme mobili
- 30. con dati dal codice
E bv è variabile/oggetto di classe ...... ?????? –
Siamo spiacenti, .. Si prega di consultare la risposta aggiornata. – JiTHiN
E sto ricevendo errore in 3 righe sotto 1) finale iConnectivityManagerField = conmanClass.getDeclaredField ("mService"); Errore: impossibile convertire da field a Dataformat.field..e Sugsession è change typ di iconnectvitymrgfield al campo –