2013-07-10 46 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) –