Autore Topic: Disabilitare rete mobile  (Letto 8763 volte)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Disabilitare rete mobile
« il: 10 Novembre 2010, 16:13:35 CET »
0
Vorrei disabilitare la rete mobile, ma non riesco a capire che comando dare...
penso di dover utilizzare il ConnectivityManager, ma non trovo nessun metodo da richiamare per chiudere la connessione dati.

Qualcuno di voi l'ha mai fatto?

Grazie!

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #1 il: 10 Novembre 2010, 16:56:07 CET »
0
Adesso mi iniziano a girare!  >:(

Per risolvere il problema sono andato a spulciare i sorgenti del framework, visto che da qualsiasi cellulare android andando su Impostazioni -> Wireless e reti -> Reti mobili, c'è un bel CheckBox che abilita e disabilita le reti mobili.

Sono arrivato a questa riga di codice ( android.git.kernel.org Git - platform/packages/apps/Phone.git/blob - src/com/android/phone/Settings.java ):
Codice (Java): [Seleziona]
 152             ConnectivityManager cm =
 153                     (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
 154
 155             cm.setMobileDataEnabled(mButtonDataEnabled.isChecked());

Uh che bello, basta richiamare il metodo setMobileDataEnabled(boolean) per attivare e disattivare la rete...

PECCATO CHE QUEL METODO NON ESISTE

e non si sa come, nei sorgenti è possibile richiamarlo!

E che fine ha fatto lo slogan "all applications created on the Android platform are equal" tanto sponsorizzato da Google!

Ma ci sta prendendo in giro?
 >:( >:( >:( >:( >:( >:( >:( >:( >:(


Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #2 il: 10 Novembre 2010, 17:22:57 CET »
+1
Se non sbaglio,questo e altri metodi (tipo abilitare il GPS) sono considerati "System ONLY" e quindi non abilitabili cosi facilmente. Infatti se cerchi non esistono app che avviano la connessione, ne che cambiano da 2g a 3g, proprio per questo motivo. Infatti HTC ha il suo widget sense che non si sa come ce la fa.
Io credo che ci voglia qualcosa tipo reflection o native call per riuscirci... se ci riesci fammi sapere perchè la cosa mi incuriosisce anche a me...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #3 il: 10 Novembre 2010, 17:51:43 CET »
0
C'è chi ci riesce ed un esempio è ApnDroid:
 apndroid -
 
 Project Hosting on Google Code


Guardando il codice noto che si occupa di disabilitare tutti gli apn... non è pulitissimo ma forse è efficace.

Il prodotto è molto aperto e basta mandare un intent all'applicazione per abilitare o disabilitare il traffico.

Per il momento non l'ho installato, continuo a cercare soluzioni più pulite, ma almeno è una alternativa!

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #4 il: 10 Novembre 2010, 18:33:42 CET »
0
C'è chi ci riesce ed un esempio è ApnDroid:
 apndroid -
 
 Project Hosting on Google Code


Guardando il codice noto che si occupa di disabilitare tutti gli apn... non è pulitissimo ma forse è efficace.

Il prodotto è molto aperto e basta mandare un intent all'applicazione per abilitare o disabilitare il traffico.

Per il momento non l'ho installato, continuo a cercare soluzioni più pulite, ma almeno è una alternativa!

beh ma la soluzione è sporchissima! in pratica non fa altro che cambiare i parametri di connessione, ma in realtà non viene disattivata. Quindi il cell cerca la connessione che non va.
Un po come se dicessi al pc di connetterti al router dicendo che l'ip del router è 111.111.11.11 quando è magari 192.168 ecc..
è diverso da DISABILITARE la connessione...
dicesi, workaround...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Disabilitare rete mobile
« Risposta #5 il: 11 Novembre 2010, 09:41:41 CET »
0
Se non sbaglio,questo e altri metodi (tipo abilitare il GPS) sono considerati "System ONLY" e quindi non abilitabili cosi facilmente. Infatti se cerchi non esistono app che avviano la connessione, ne che cambiano da 2g a 3g, proprio per questo motivo. Infatti HTC ha il suo widget sense che non si sa come ce la fa.
Io credo che ci voglia qualcosa tipo reflection o native call per riuscirci... se ci riesci fammi sapere perchè la cosa mi incuriosisce anche a me...

Quoto Nicola.
Marco, prova a vedere questo (se già non l'hai fatto).
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #6 il: 11 Novembre 2010, 10:27:08 CET »
0
Quoto Nicola.
Marco, prova a vedere questo (se già non l'hai fatto).

Il problema è che non trovo nulla... volevo proprio cercare il codice sorgente del widget di Sense... ma non lo trovo!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Disabilitare rete mobile
« Risposta #7 il: 11 Novembre 2010, 10:32:12 CET »
0
Scusami, forse non ho capito io o forse non sono riuscito a farmi capire.

Con quell'esempio intendevo suggerirti di usare la reflection per prenderti il metodo setMobileDataEnabled dall'interfaccia IConnectivityManager. Lo stesso meccanismo utilizzato dall'esempio del link.
Credo che potrebbe funzionare.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Disabilitare rete mobile
« Risposta #8 il: 11 Novembre 2010, 12:15:22 CET »
0
Il problema è che non trovo nulla... volevo proprio cercare il codice sorgente del widget di Sense... ma non lo trovo!
Ovvio che non trovi il sorgente del widget Sense: è closed source :D

Se vuoi vedere il sorgente di un buon widget, prova coi sorgenti del power widget della CyanogenMod.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Disabilitare rete mobile
« Risposta #9 il: 11 Novembre 2010, 17:58:05 CET »
0
@7h38ugg3r non penso si possa fare...

@JD Ma non avevano rilasciato i sorgenti??? Forse solo del kernel non di sense???

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Disabilitare rete mobile
« Risposta #10 il: 11 Novembre 2010, 18:12:46 CET »
0
@JD Ma non avevano rilasciato i sorgenti??? Forse solo del kernel non di sense???

Ovviamente solo del kernel :)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Disabilitare rete mobile
« Risposta #11 il: 11 Novembre 2010, 20:24:54 CET »
0
@JD Ma non avevano rilasciato i sorgenti??? Forse solo del kernel non di sense???

Seeeeeeeeee :D HTC che rilascia i sorgenti della Sense xD
Accadrà subito dopo il rilascio di quelli Windows Phone 7  ;-)

Come ho già scritto in un altro thread, hanno rilasciato i sorgenti del kernel sono perché OBBLIGATI. Altrimenti manco quelli avresti visto :P
E tra parentesi, per il kernel dell'MyTouch Slide non hanno pubblicato una parte che gestisce il WiFi, andando ad infrangere la licenza GPL. L'ha segnalato anche Cyanogen sul suo Twitter.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:Disabilitare rete mobile
« Risposta #12 il: 09 Marzo 2011, 23:38:23 CET »
0
Ragazzi, quindi andando al dunque, NON SI PUò GESTIRE LA CONNESSIONE DATI SU ANDROID? Nel senso che non posso attivarla e disattivarla con un semplice bottone?

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:Disabilitare rete mobile
« Risposta #13 il: 10 Marzo 2011, 01:04:39 CET »
0
Ho trovato una possibile soluzione a questo link: 
How to disable Mobile Data on Android - Stack Overflow
A quanto ho capito, si utilizza la tecnica Java Reflection (che non so cosa sia) per attivare le api (nascoste all'utente) che servono a gestire la connessione dati. Mi confermate tutto?
Qualcuno sa cosa sia questa tecnica Java Reflection? E come si usa?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Disabilitare rete mobile
« Risposta #14 il: 10 Marzo 2011, 09:01:44 CET »
0
Ragazzi, quindi andando al dunque, NON SI PUò GESTIRE LA CONNESSIONE DATI SU ANDROID? Nel senso che non posso attivarla e disattivarla con un semplice bottone?

Così pare! Non ti basta creare un intent che manda l'utente alla schermata di configurazione della connettività?

A quanto ho capito, si utilizza la tecnica Java Reflection (che non so cosa sia) per attivare le api (nascoste all'utente) che servono a gestire la connessione dati. Mi confermate tutto?

Probabilmente si può fare andiando a chiamare API non pubbliche.
A mio avviso però dovresti lasciar stare perchè se un API non è pubblica un motivo ci sarà pure no?
Fai le cose semplici, manda l'utente alla schermata di configurazione.

Citazione
Qualcuno sa cosa sia questa tecnica Java Reflection? E come si usa?

Fai prima a leggerti uno degli svariati articoli che trovi su google, non è una cosa che si spiega in due parole...