Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

네트워크 데이터 사용량 최적화

스마트폰 사용 기간 동안 모바일 데이터 요금제 비용이 기기 자체의 비용을 초과하는 일은 쉽게 일어날 수 있습니다. Android 7.0(API 레벨 24)부터 사용자는 기기의 데이터 사용을 최적화하고 데이터 사용량을 줄이기 위해 기기 전체에서 데이터 절약 모드를 사용 설정할 수 있습니다. 이 기능은 로밍 중이거나, 결제 주기가 끝날 무렵이거나, 소액 선불 데이터 팩을 사용 중인 경우에 특히 유용합니다.

사용자가 설정에서 데이터 절약 모드를 사용 설정하고 기기가 종량제 네트워크를 사용하는 경우, 시스템은 백그라운드 데이터 사용을 차단하고 가능하면 포그라운드에서 데이터 사용량을 줄이도록 앱에 신호를 보냅니다. 사용자는 데이터 절약 모드를 사용 설정한 경우에도 특정 앱을 허용 목록에 추가하여 데이터 전송량 제한이 있는 백그라운드 데이터 사용을 허용할 수 있습니다.

Android 7.0(API 수준 24)은 ConnectivityManager API를 확장하여 사용자의 데이터 절약 모드 환경설정을 검색하고 환경설정 변경사항을 모니터링하는 방법을 앱에 제공합니다. 앱에서는 사용자가 데이터 절약 모드를 사용 설정했는지 확인하고 포그라운드 및 백그라운드 데이터 사용을 제한하도록 하는 것이 좋습니다.

데이터 절약 모드 환경설정 확인

Android 7.0(API 수준 24)에서 앱은 ConnectivityManager API를 사용하여 어떤 데이터 사용량 제한이 적용되고 있는지 확인할 수 있습니다. getRestrictBackgroundStatus() 메서드는 다음 값 중 하나를 반환합니다.

RESTRICT_BACKGROUND_STATUS_DISABLED
데이터 절약 모드가 사용 중지되었습니다.
RESTRICT_BACKGROUND_STATUS_ENABLED
사용자가 이 앱에 데이터 절약 모드를 사용 설정했습니다. 앱은 포그라운드의 데이터 사용량을 제한하고 백그라운드 데이터 사용량 제한을 적절히 처리하도록 해야 합니다.
RESTRICT_BACKGROUND_STATUS_WHITELISTED
사용자가 데이터 절약 모드를 사용 설정했지만 앱이 허용 목록에 추가되어 있습니다. 앱은 계속 포그라운드 및 백그라운드 데이터 사용량을 제한하기 위해 노력해야 합니다.

데이터 절약 모드가 사용 중지되어 있거나 앱이 허용 목록에 추가되어 있더라도 기기가 데이터 전송량 제한이 있는 네트워크에 연결될 때마다 데이터 사용량을 제한하는 것이 좋습니다. 다음 샘플 코드에서는 ConnectivityManager.isActiveNetworkMetered()ConnectivityManager.getRestrictBackgroundStatus()를 사용하여 앱이 사용해야 하는 데이터의 양을 판단합니다.

Kotlin

    (getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
        // Checks if the device is on a metered network
        if (isActiveNetworkMetered) {
            // Checks user’s Data Saver settings.
            when (restrictBackgroundStatus) {
                RESTRICT_BACKGROUND_STATUS_ENABLED -> {
                    // Background data usage is blocked for this app. Wherever possible,
                    // the app should also use less data in the foreground.
                }
                RESTRICT_BACKGROUND_STATUS_WHITELISTED -> {
                    // The app is whitelisted. Wherever possible,
                    // the app should use less data in the foreground and background.
                }
                RESTRICT_BACKGROUND_STATUS_DISABLED -> {
                    // Data Saver is disabled. Since the device is connected to a
                    // metered network, the app should use less data wherever possible.
                }
            }
        } else {
            // The device is not on a metered network.
            // Use data as required to perform syncs, downloads, and updates.
        }
    }
    

자바

    ConnectivityManager connMgr = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
    // Checks if the device is on a metered network
    if (connMgr.isActiveNetworkMetered()) {
      // Checks user’s Data Saver settings.
      switch (connMgr.getRestrictBackgroundStatus()) {
        case RESTRICT_BACKGROUND_STATUS_ENABLED:
        // Background data usage is blocked for this app. Wherever possible,
        // the app should also use less data in the foreground.

        case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
        // The app is whitelisted. Wherever possible,
        // the app should use less data in the foreground and background.

        case RESTRICT_BACKGROUND_STATUS_DISABLED:
        // Data Saver is disabled. Since the device is connected to a
        // metered network, the app should use less data wherever possible.
      }
    } else {
      // The device is not on a metered network.
      // Use data as required to perform syncs, downloads, and updates.
    }
    

허용 목록 권한 요청

앱이 백그라운드에서 데이터를 사용해야 하는 경우, 앱 패키지 이름의 URI가 포함된 Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS 인텐트(예: package:MY_APP_ID)를 전송하여 허용 목록 권한을 요청할 수 있습니다.

인텐트와 URI를 전송하면 설정 앱이 실행되고 앱의 데이터 사용량 설정이 표시됩니다. 그러면 사용자는 앱의 백그라운드 데이터를 사용 설정할지 판단할 수 있습니다. 이 인텐트를 전송하기 전에 먼저 사용자에게 백그라운드 데이터 사용량을 사용 설정할 목적으로 설정 앱을 실행하고 싶은지 묻는 것이 좋습니다.

데이터 절약 모드 환경설정 변경 모니터링

앱은 ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED를 수신 대기하려고 BroadcastReceiver를 만들고 수신기를 Context.registerReceiver()에 동적으로 등록하여 데이터 절약 모드 환경설정의 변경사항을 모니터링할 수 있습니다. 앱은 이 브로드캐스트를 수신할 때 ConnectivityManager.getRestrictBackgroundStatus()를 호출하여 새 데이터 절약 모드 환경설정이 권한에 영향을 미치는지 확인해야 합니다.

참고: 시스템에서는 Context.registerReceiver()에 동적으로 등록하는 앱에만 이 브로드캐스트를 전송합니다. 매니페스트에서 이 브로드캐스트를 수신하도록 등록되는 앱은 이 브로드캐스트를 수신하지 못합니다.

Android 디버그 브리지 명령어로 테스트

Android 디버그 브리지(ADB)는 데이터 절약 모드 상태에서 앱을 테스트하는 데 사용할 수 있는 몇 가지 명령어를 제공합니다. 네트워크 권한을 확인 및 구성하거나 무선 네트워크를 데이터 전송량 제한 있음으로 설정하여 무제한 네트워크에서 앱을 테스트할 수 있습니다.

$ adb shell dumpsys netpolicy
현재 글로벌 백그라운드 네트워크 제한 설정, 현재 허용 목록에 있는 패키지 UID 및 알려진 다른 패키지의 네트워크 권한이 포함된 보고서를 생성합니다.
$ adb shell cmd netpolicy
네트워크 정책 관리자(netpolicy) 명령어의 전체 목록을 표시합니다.
$ adb shell cmd netpolicy set restrict-background <boolean>
true 또는 false를 각각 전달할 때 데이터 절약 모드를 사용 설정하거나 사용 중지합니다.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
지정된 패키지 UID를 허용 목록에 추가하여 데이터 전송량 제한이 있는 백그라운드 데이터 사용을 허용합니다.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
지정된 패키지 UID를 허용 목록에서 제거하여 데이터 절약 모드가 사용 설정된 동안 데이터 전송량 제한이 있는 백그라운드 데이터 사용을 차단합니다.
$ adb shell cmd netpolicy list wifi-networks
모든 Wi-Fi 네트워크를 나열하고 데이터 전송량 제한이 있는지 표시합니다.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
지정된 SSID가 있는 Wi-Fi를 데이터 전송량 제한 있음으로 설정하므로 무제한 네트워크에서 데이터 전송량 제한이 있는 네트워크를 시뮬레이션할 수 있습니다.