2013-07-10 3 views
2

Я ищу looooooot, но я не нашел то, что хочу.Как включить 3G кнопкой - андроид

Я пытаюсь сделать приложение, которое пользователь может включить и выключить, нажав кнопку для каждого из них.

Я нашел несколько кодов с использованием отражения (я буду использовать Android 2.3 и выше), но я не знаю, как его адаптировать для использования с кнопками.

Я ищу, как отражается работа, я трачу много времени на поиск других способов сделать это, но ... любой работает для меня.

Худшая проблема заключается в том, что коды и примеры, которые я нашел, не использовали исключения (бросает или пытается поймать), поэтому я не знаю, как с ними работать.

Это код, который я нашел здесь, но я не знаю, как его использовать (или называйте его true для false, чтобы включить и отключить данные 3G/Mobile) нажатием кнопки.

Кто-нибудь может мне помочь?

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); 
    } 

Ссылка, где я нашел этот код: How can i turn off 3G/Data programmatically on Android?

+0

просьба указать, где вы находите этот фрагмент кода, спасибо. – Raptor

+0

Я нашел его здесь: http://stackoverflow.com/questions/12535101/how-can-i-turn-off-3g-data-programmatically-on-android –

+0

ваш вопрос не в том, как включить 3G, а в вместо этого назначьте функцию кнопке. – Raptor

ответ

2

привет! вам просто нужно вызвать функцию внутри onClickListener каждой кнопки и позволить функции запускаться в отдельном потоке!

На Баттона:

 btOff.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(MainActivity.this,"Trying to switch off 3G!",Toast.LENGTH_SHORT).show(); 

       (new Thread(new Runnable() { 
        @Override 
        public void run() { 

         setMobileDataEnabled(MainActivity.this,false); 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           Toast.makeText(MainActivity.this, "Switched OFF 3G!", Toast.LENGTH_SHORT).show(); 
          } 
         }); 


        } 
       })).start(); 



      } 
     }); 

* Добавить Try ... Catch пункты функции::

окончательный ConnectivityManager аферист кнопку

btOn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Toast.makeText(MainActivity.this,"Trying to switch on 3G!",Toast.LENGTH_SHORT).show(); 

       (new Thread(new Runnable() { 
        @Override 
        public void run() { 

         setMobileDataEnabled(MainActivity.this,true); 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           Toast.makeText(MainActivity.this, "Switched ON 3G!", Toast.LENGTH_SHORT).show(); 
          } 
         }); 

        } 
       })).start(); 
      } 
     }); 

Off ;

conman = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE);

final Class conmanClass; 

    try { 


     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); 

    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } 

} 

Надеюсь, что ответит на ваш вопрос!

+0

Я попробую ваше решение, спасибо за ответ: D –

+0

Это именно то, что я искал, отлично работает, я очень ценю вашу помощь, я не могу поверить, что единственное, что мне нужно было сделать: setMobileDataEnabled (MainActivity .this, true/false). Спасибо за вашу помощь (y) –

Смежные вопросы