반복적인 알람과 백그라운드 서비스의 가장 흔한 사용 방법은 인터넷 리소스, 캐시 데이터에서 애플리케이션 데이터의 정기 업데이트를 예약하거나 장기 실행 다운로드를 실행하는 것입니다. 그러나 인터넷에 연결되어 있지 않거나 연결이 너무 느려서 다운로드를 완료할 수 없다면 기기를 깨워서 업데이트를 예약할 필요가 있을까요?
ConnectivityManager
를 사용하여 인터넷에 실제로 연결되었는지 확인하고 인터넷에 연결되었다면 설정된 연결 유형을 검사할 수 있습니다.
인터넷에 연결되지 않았다면 인터넷 리소스에 기초하여 업데이트를 예약할 필요가 없습니다. 다음 코드 스니펫은 ConnectivityManager
를 사용하여 활성 네트워크를 쿼리하고 인터넷이 연결되었는지 확인하는 방법을 보여줍니다.
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
현재 이용 가능한 인터넷 연결 유형을 확인할 수 있습니다.
기기 연결은 모바일 데이터, WiMAX, Wi-Fi 및 이더넷 연결로 제공될 수 있습니다. 아래와 같이 활성 네트워크 유형을 쿼리하면 이용 가능한 대역폭에 기초하여 새로고침 비율을 변경할 수 있습니다.
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
모바일 데이터 비용은 Wi-Fi보다 상당히 높으므로, 대부분 앱의 업데이트 비율은 모바일 연결에서 더 낮아야 합니다. 마찬가지로 Wi-Fi에 연결될 때까지 큰 용량은 다운로드를 정지해야 합니다.
업데이트를 비활성화한 뒤에는 연결에 변화가 있는지 수신 대기하고 있다가 인터넷 연결이 설정되면 업데이트를 재개해야 합니다.
ConnectivityManager
는 연결 세부정보가 변경되면 CONNECTIVITY_ACTION
("android.net.conn.CONNECTIVITY_CHANGE"
) 작업을 브로드캐스트합니다. 매니페스트에서 브로드캐스트 수신기를 등록하고 이러한 변화를 수신 대기하고 있다가 그에 따라 백그라운드 업데이트를 재개(또는 정지)할 수 있습니다.
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
기기 연결은 자주 변경될 수 있습니다. 이 브로드캐스트는 모바일 데이터에서 Wi-Fi 사이를 오갈 때마다 트리거됩니다. 그러므로 이전에 중단된 업데이트나 다운로드를 재개하고자 할 때만 이 브로드캐스트를 모니터링하는 것이 좋습니다. 일반적으로는 업데이트를 시작하기 전에 인터넷 연결을 확인하는 것만으로 충분하고 인터넷이 연결되지 않았다면 연결이 복구될 때까지 추가 업데이트는 중단해야 합니다.
이 기술은 매니페스트에서 선언한 브로드캐스트 수신기 전환이 필요합니다. 이 작업은 다음 과정에서 설명할 것입니다.
SSISO Community