안녕하세요.
이곳저곳에서 자료를 구해
3G와 WIFI가 모두 OFF 상태일 때 3G망으로 접속하도록 코드를 구현하였습니다.
public void Connect3G(){ int ret=0; ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if(!cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected() && !cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) { ret = cm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI"); } }
그리고 브로드캐스트 리시버에서
ConnectivityManager.CONNECTIVITY_ACTION
일 경우에 실질적으로 IP를 받아 접속 하도록 하였습니다.
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); boolean ret = false; String strIP = null; int ipAddress = 0; strIP = getLocalIpAddress(); ipAddress = StrtoInt_Ip(strIP); ret = connectivityManager.requestRouteToHost(5, ipAddress); }
위와 같이 하면 안테나 영역에 3G로 붙은 것이 정상적으로 나오고,activeNetInfo와 mobNetInfo의 상태를 확인해봐도 MOBILE로 CONNECTED 되었다고 나옵니다.
그런 상태에서 인터넷으로 아무 사이트를 접속해봐도 웹페이지를 표시할 수 없다고 나타나네요..
또한 환경 설정에서 3G 쪽을 보면 "해제"로 되어 있는 상태입니다.즉. 안테나 영역엔 3G로 붙었다 하지만 환경 설정엔 "해제"로 되어있습니다.
왜 이런 문제가 생기는지 잘 모르겠습니다.혹시 위와 같은 상황에서 3G로 정상적인 네트워크가 활성화 되도록 하는 방법 아시는 분 계시면.답변 좀 부탁드립니다.
public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { } return null; }
아하. 답변 감사합니다. ^^
저래서 안되는 거였군요.
위에 소느느 IP를 얻어오는 소스입니다.
저렇게 해서는 안되는 것 인가보네요.. ^^
출처 : http://www.androidpub.com/685748
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 컴포넌트 #1 - 액티비티 (0) | 2010.12.03 |
---|---|
안드로이드 애드몹 달기 (1) | 2010.11.16 |
[안드로이드 팁] 안드로이드 TextView에 줄긋기 (0) | 2010.11.15 |
[안드로이드 팁] 안드로이드 TextView에 각종 스타일(html)을 사용하는 방법 (0) | 2010.11.15 |
안드로이드 3G WIFI 확인 (0) | 2010.11.15 |
네트워크 - 인터넷 연결 관리자 (0) | 2010.11.12 |
AndroidManifest.xml (0) | 2010.11.12 |
[안드로이드] 파일 위치에 따른 미디어 재생 샘플코드 [스크랩 자료] (0) | 2010.11.12 |
[안드로이드 - 타이틀바,상태바] 타이틀바, 상태바 없애기 (0) | 2010.11.10 |
혹시 안드로이드 SDK 버젼을 몇으로 실행하고 계신가요?
2.1 버젼까지는 안드로이드에서 데이터 네트워크 (3G) 에 대한 제어 라이브러리를 제공하지 않고 있습니다.
때문에 각 통신사에서 나름대로의 방법으로 3G 연결 및 해제에 대한 설정을 제공하고 있구요.
여쭤보고 싶은 게 위에서 사용하신 방식으로 ip를 할당받으신다고 했는데
그럼 통신사로 직접 붙어서 ip address를 할당받으신다는 건가요?; 그게 가능한 지를 모르겠어서요;;
한국은 미국과 달리 이통사에서 ip를 직접 제공하기 때문에
APN 정보를 정확하게 설정해줘야 데이터 네트워크를 정상적으로 이용할 수 있는 거로 알고 있습니다.
그러나 APN 정보에 변이를 주어서 데이터 네트워크를 끊고 연결하는 것은 가능합니다.
답변 정리해드리자면,
1. 프로요(2.2) 가 적용되지 않은 단말에서 3G 제어는 불가능합니다. (제가 알고 있는 한에서)
2. APN 정보를 수정해서 3G 제어가 가능합니다. (구글 코드 검색에서 APNdroid 를 검색해보세요.)
단, 이 경우 어플리케이션의 비정상 종료에 대한 대책을 세워두셔야 합니다.