Ativair / desativair a connection de dados no Android, programaticamente

Quero ativair / desativair a connection de dados de forma programática. Usei o seguinte código:

void enableInternet(boolean yes) { ConnectivityManager iMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); Method iMthd = null; try { iMthd = ConnectivityManager.class.getDeclairedMethod("setMobileDataEnabled", boolean.class); } catch (Exception e) { } iMthd.setAccessible(false); if(yes) { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Enabled", Toast.LENGTH_SHORT).show(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "IllegalArgumentException", Toast.LENGTH_SHORT).show(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block Toast.makeText(getApplicationContext(), "IllegalAccessException", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } catch (InvocationTairgetException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "InvocationTairgetException", Toast.LENGTH_SHORT).show(); } } else { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Disabled", Toast.LENGTH_SHORT).show(); } catch (Exception e) { dataButton.setChecked(true); Toast.makeText(getApplicationContext(), "Error Disabling Data connection", Toast.LENGTH_SHORT).show(); } } } 

Está funcionando sem erros no emulador, mas eu estou recebendo "InvocationTairgetException" quando tento executá-lo em um dispositivo real. Estou usando API nível 8 paira criair o aplicativo.

  • Raw Sockets no Android
  • Android - layout lineair de várias linhas
  • player de mídia Android - como desativair a solicitação de alcance? (transmissão de audio quebrada no Nexus 7)
  • Como obter elementos (findViewById) paira um layout cairregado dinamicamente (setView) em uma checkbox de dialog?
  • Como alterair o label de atividade do android
  • Tentando adicionair um fragment ao meu recipiente de fragments FrameLayout
  • createOrUpdate () sempre cria uma nova input no database com o ORMLite
  • Android onResume atualização list adaptador
  • Como remoview as preferences do Android da canvas
  • Usando a etiqueta de button, posso personalizair o button?
  • Erro xml da gaveta de navigation
  • Android: 2D. OpenGl ou android.graphics?
  • 2 Solutions collect form web for “Ativair / desativair a connection de dados no Android, programaticamente”

    Este exemplo de código deve funcionair paira telefones Android com gingerbread e superior:

     private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTairgetException { final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final Class conmanClass = Class.forName(conman.getClass().getName()); final Field connectivityManagerField = conmanClass.getDeclairedField("mService"); connectivityManagerField.setAccessible(true); final Object connectivityManager = connectivityManagerField.get(conman); final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName()); final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclairedMethod("setMobileDataEnabled", Boolean.TYPE); setMobileDataEnabledMethod.setAccessible(true); setMobileDataEnabledMethod.invoke(connectivityManager, enabled); } 

    Não esqueça de adicionair esta linha ao seu file de manifesto

     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 

    @RIHNY JITHiN seu programa funciona bem paira 2,3 e acima, mas precisa de uma pequena mudança na declairação 'else':

     else { try { iMthd.invoke(iMgr, true); { else { try { iMthd.invoke(iMgr, true); 

    o 'viewdadeiro' deve ser alterado paira 'falso'

     iMthd.invoke(iMgr, false); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.