2013-07-10 2 views
2

looooooot를 검색하지만 원하는 것을 찾지 못했습니다.단추로 3G를 사용하는 방법 - android

사용자가 각 앱의 버튼을 눌러서 켤 수있는 앱을 만들려고합니다.

리플렉션을 사용하여 일부 코드를 발견했지만 (Android 2.3 이상을 사용합니다) 버튼으로 사용하는 방법을 알지 못합니다.

나는 반사 작용이 어떻게 작용 하는지를 탐색하고, 나는 그것을하기위한 다른 방법을 찾는 데 많은 시간을 할애하지만 ... 누군가 나를 위해 일한다.

최악의 문제는 예외 (throw 또는 catch 시도)를 사용하지 않은 코드와 예제로 이들과 작업하는 방법을 모르겠습니다.

이것은 여기에서 찾은 코드이지만 버튼 클릭으로 사용 방법을 알지 못하거나 3G/모바일 데이터를 사용 또는 사용 중지하기 위해 false로 true로 부릅니다.

누구든지 나를 도와 줄 수 있습니까? 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

안녕하세요 : 나는이 코드를 찾을 곳

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

링크! 각 버튼의 onClickListener 내부에서 함수를 호출하고 함수가 별도의 스레드에서 실행되도록해야합니다.

최종 ConnectivityManager의 CONMAN : 시도

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



      } 
     }); 

* 함수에 ... 캐치 조항을 추가

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

버튼 끄기 : 버튼을

;

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 .이, 사실/거짓). 도움 주셔서 감사합니다 (y) –

관련 문제