2013-07-10 21 views
2

我搜索looooooot,但我没有找到我想要的。如何启用3G按钮 - android

我试图制作一个应用程序,用户可以打开和关闭每个按下按钮。我发现了一些代码使用反射(我会使用android 2.3和以上),但我不知道如何适应它与按钮使用。

我搜索反射如何工作,我花了很多时间寻找其他方法来做到这一点,但是......任何人都适合我。

最糟糕的问题是我发现的代码和例子没有使用异常(抛出或尝试catch),所以我不知道如何使用它们。

这是我在这里找到的代码,但我不知道如何在按钮单击中使用它(或称它为true,以启用和禁用3G /移动数据)。

任何人都可以帮到我吗?

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中的函数,并让该函数在单独的线程中运行!

开按钮:

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

关闭按钮:

 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赌侠;

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