안드로이드 개발 정보
(글 수 568)
3g on/off에 대한 팁이 없는것 같아서, 하나 올립니다.
저 또한 이기능을 구현할 일이 있어서 검색을 해보니 참고할 자료가 없더군요.
그래서 그냥 만들어봤습니다. 문제가 있으면 리플달아주세요!
우선 개발하시는 패키지에 아래의 패키지를 만듭니다.
com.android.internal.telephony
위에 만든 패키지에 첨부한 ITelephony.aidl을 추가합니다.
com.android.internal.telephony
|
+--> ITelephony.aidl
public void TelephonyAidl(Context context, boolean dataconnectivity) throws Exception {
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
@SuppressWarnings("rawtypes")
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService;
telephonyService = (ITelephony)m.invoke(tm);
if(dataconnectivity) {
telephonyService.enableDataConnectivity();
} else {
telephonyService.disableDataConnectivity();
}
}
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
@SuppressWarnings("rawtypes")
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService;
telephonyService = (ITelephony)m.invoke(tm);
if(dataconnectivity) {
telephonyService.enableDataConnectivity();
} else {
telephonyService.disableDataConnectivity();
}
}
위 코드의 인자 dataconnectivity에 true/false(on/off) 로 3g의 허용과 차단을 할수 있습니다.
또한, 설정->무선및네트웍크->데이터 네트워크 설정
에서 설정값에 대한 모니터링할 이벤트 리스너를 등록하고(TelephonyManager를 통해서)
리스너에서 onDataConnectionStateChanged 를 통해서 상태변화에 대한 적절한 대응을 처리하면 됩니다.
메니페스트 퍼미션은
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
두개 추가해주시고요
위 관련사항에 대해서 고민하시는 분들 참고하세요!
2011.07.15 15:00:25
07-15 14:57:41.847: ERROR/AndroidRuntime(17601): Caused by: java.lang.ClassCastException: com.android.internal.telephony.ITelephony$Stub$Proxy
뜨네요 이거 패키지 경로 꼭저걸로 해야합니까?
2011.07.15 15:05:21
신기하네요 aidl 이거 대체 무슨 확장자갈래-_-
저경로로 넣으니깐 java파일이 gen쪽에 생성이 되네요 참신기하네요.-_-
무슨 원리인가요?
아차: 참고로 잘됩니다.
2011.07.16 23:44:47
좋은 글 감사합니다 :)
그런데요. 이거 진저브레드에 쓸 수 있는 건가요?
해보니깐 안되더라구요. 검색해보니깐 비슷한 분 있던데..
음.. 답변 부탁드릴께요 :)
2011.07.18 11:12:05
구글이 정책을 바꾸지 않는이상. 아마도 이부분은 죽~ 사용가능할겁니다.
아니면, 인터페이스 메소드가 바뀌면 맞춰주면 될것 같습니다. 이부분은 fullsource에서 framework의 telephony의 aidl을 일부 발취해서
사용하는것입니다.
2011.07.19 00:52:44
갤럭시s는 권한 구조가 조금 다른가봐요 :)
검색해본 결과
https://code.google.com/p/android/issues/detail?id=15031
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
이 권한이 시스템 권한으로 변경되어서 더이상 사용 할 수없다고 하네요.
넥서스s 진저랑 에뮬레이터 진저에서도 안되네요.
에뮬레이터 프로요에서는 작동하네요 :)
결국 다른방법으로 3G on/off를 해결했지만 좋은 팁 감사합니다 :)