티스토리 뷰
네트워크를 사용하는 앱에서 사용자가 네트워크에 연결되어있지 않다면 어떻게 될까요?? try / catch 문으로 오류를 잡아낼 수도 있겠지만, 결국 연결이 안 된 상태에서는 데이터의 업데이트가 이루어지지 않을 것 입니다. 따라서 네트워크에 연결되어 있는지 아닌지를 알 수 있다면, 미리 연결을 해달라고 요청하는 등의 메세지를 줄 수 있고 오류에 빠져 catch문으로 빠지지 않아도 될 것입니다.
우선 네트워크 확인을 위해서는 다음과 같은 퍼미션이 Manifests에 꼭 추가되어야합니다.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
네트워크 연결 확인
그럼 먼저 LTE나 3G같은 모바일(MOBILE)이나 WIFI에 상관없이 연결상태를 알아보겠습니다. ConnectivityManager로 연결중인 서비스를 사져온 후 NetworkInfo로 네트워크 정보를 가져와줍니다.
1 2 | ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ninfo = cm.getActiveNetworkInfo(); | cs |
네트워크 정보를 가져왔습니다. 이제 이 정보를 이용해서 네트워크 연결 유무를 파악합니다.
1 2 3 4 5 | if(ninfo == null){ return false; }else{ return true; } | cs |
만약 정보가 들어있지 않다면, 네트워크 연결이 안되어 있다는것이고 그렇지 않다면 무언가와 연결이 되어있다는 뜻이므로, 다음과 같이 boolean 형태로 true와 false를 return 하도록 하였습니다. 제가 사용한 전체적인 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 | private boolean netWork(){ ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ninfo = cm.getActiveNetworkInfo(); if(ninfo == null){ return false; }else{ return true; } } | cs |
네트워크의 연결 상태를 알아보았으니 조금만 더 세부로 들어가보겠습니다.
네트워크 종류 확인(MOBILE,WIFI)
다른 앱들을 사용하다보면 데이터가 큰 파일을 다운받을 시, <Wifi 로만 다운로드 받기> 같은 옵션을 보셨을 것입니다. 따라서 안드로이드에서는 사용자 기기의 네트워크가 Wifi로 연결되어있는지, Mobile즉 LTE나 3G로 연결되어있는지 확인이 가능합니다. 앞서 알아보았던 networkinfo에는 이러한 정보가 이미 담겨있습니다. 따라서 다음의 여러개의 함수들 중 Name에 관련된 것을 사용하시면 됩니다.
1 | ninfo.getTypeName() | cs |
getTypeName()을 통해 Type의 이름을 가져오면, LTE나 3G로 네트워크 통신을 하고있으면 MOBILE을 Wifi로 통신하고 있다면, WIFI를 알려주게됩니다. 따라서 if문을 통해 제어를 하시면, 간단하게 네트워크 연결 종류에 따른 처리를 하실 수 있습니다.
'안드로이드' 카테고리의 다른 글
[안드로이드 스튜디오] 앱 스크린샷 찍기(스마트폰 템플릿) (0) | 2018.04.05 |
---|---|
[안드로이드 스튜디오]Apk Signature(앱 서명 signature) (0) | 2018.01.05 |
[안드로이드] 최근 사용한 앱(실행된 앱) 목록 제외하기 (1) | 2017.11.13 |
[안드로이드] LG 기종 백그라운드, 미해결 (0) | 2017.09.18 |
[안드로이드] 이어폰 착용시 스피커 사용 (1) | 2017.08.30 |
- Total
- Today
- Yesterday