반응형
앱 내에서 네트워크 연결을 확인해야 할 상황이 많이 있다.
예를 들어 실시간 방송 중 네트워크가 끊겼다면?, 채팅을 보낼 때 인터넷이 연결이 안 되는 상황이면? 등등
사용자가 네트워크에 연결이 됐는지 안 됐는지,
연결이 됐다면 와이파이인지 셀룰러 통신(3G, LTE, 5G)을 사용하고 있는지를 알기 위한 코드이다.
* 셀룰러 통신 : 주파수 자원을 효율적으로 활용해 기지국을 공간적으로 확장하는 이동통신
- 네트워크 연결 상태를 토스트 메세지로 띄우도록 한 결과 화면입니다.
- 메니페스트 파일
네트워크 상태 접근하기 위한 권한 추가
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 네트워크 연결 확인 java 코드
public void getConnectivityStatus(Context context) {
// 네트워크 연결 상태 확인하기 위한 ConnectivityManager 객체 생성
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
// 기기가 마시멜로우 버전인 Andorid 6 이상인 경우
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
// 활성화된 네트워크의 상태를 표현하는 객체
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
if (nc != null) {
if (nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
Toast.makeText(context, "와이파이 연결됨", Toast.LENGTH_SHORT).show();
} else if (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
Toast.makeText(context, "셀룰러 통신 사용", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(context, "인터넷 연결 안됨", Toast.LENGTH_SHORT).show();
}
} else {
// 기기 버전이 마시멜로우 버전보다 아래인 경우
// getActiveNetworkInfo -> API level 29에 디플리케이트 됨
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
// 연결된 네트워크 확인
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
Toast.makeText(context, "와이파이 연결됨", Toast.LENGTH_SHORT).show();
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
Toast.makeText(context, "셀룰러 통신 사용", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(context, "인터넷 연결 안됨", Toast.LENGTH_SHORT).show();
}
}
}
}
- 특이사항
네트워크 연결 여부 정보를 가져오기 위한 Networkinfo 클래스의 getActiveNetworkInfo()는 API 29에서 deprecated 됐습니다.
마시멜로우 버전 이상일 경우, 이하일 경우 네트워크 연결 확인하는 방법이 다름
- 참고
https://developer.android.com/training/monitoring-device-state/connectivity-status-type
반응형
'Android > 개념 및 예제' 카테고리의 다른 글
ConstraintLayout 이해, 정복하기 (0) | 2020.09.06 |
---|---|
Android Notification Example (+Channel) (0) | 2020.08.13 |
모서리가 둥근 ImageView, Button, TextView 만들기 (0) | 2020.08.13 |
[RecyclerView]Header와 Footer를 가진 리사이클러뷰 (0) | 2020.08.13 |
[안드로이드/Android] 플레이스토어 앱 강제로 업데이트하기 (0) | 2020.07.23 |