1page.title=Data Saver 2metaDescription=User-enabled data usage optimization. 3page.keywords="android N", "data usage", "metered network" 4page.image=images/cards/card-nyc_2x.jpg 5@jd:body 6 7<div id="qv-wrapper"> 8 <div id="qv"> 9 <h2> 10 이 문서의 내용 11 </h2> 12 13 <ol> 14 <li> 15 <a href="#status">Data Saver 기본 설정 확인</a> 16 <ol> 17 <li> 18 <a href="#request-whitelist">허용 목록 권한 요청</a> 19 </li> 20 </ol> 21 </li> 22 23 <li> 24 <a href="#monitor-changes">Data Saver 기본 설정 변경 사항 25모니터링</a> 26 </li> 27 28 <li> 29 <a href="#testing">Android 디버그 브리지 명령을 이용한 테스트</a> 30 </li> 31 </ol> 32 </div> 33</div> 34 35<p> 36 스마트폰의 수명 전체에 걸쳐, 모바일 데이터 요금제에 따른 비용이 37 기기 자체의 가격을 쉽게 초과할 수 있습니다. N Developer Preview에서는 사용자들이 38로밍 중이든, 결제 주기가 끝날 무렵이든, 소액 선불 데이터 팩을 사용 중이든 상관없이, 데이터 사용량을 줄이기 위해 기기 전체에서 39Data Saver를 활성화할 수 있습니다. 40</p> 41 42<p> 43 사용자가 <strong>Settings</strong>에서 Data Saver를 활성화하고 44 해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드 데이터 사용을 45차단하고 가능하면 포그라운드에서 데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다. 사용자는 46Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하기 위해 47특정 앱을 허용 목록에 추가할 수 있습니다. 48</p> 49 50<p> 51 N Developer Preview는 {@link android.net.ConnectivityManager} 52 API를 확장하여 <a href="#status">사용자의 Data Saver 기본 설정을 검색</a>하고 <a href="#monitor-changes">기본 53 설정 변경을 모니터링</a>하는 방법을 54 앱에 제공합니다. 사용자가 Data Saver를 활성화했는지 여부를 앱이 확인하고 55포그라운드 및 백그라운드 데이터 사용을 제한하기 위해 56앱이 노력하는 것은 좋은 방법입니다. 57</p> 58 59<h2 id="status"> 60 Data Saver 기본 설정 확인 61</h2> 62 63<p> 64 N Developer Preview에서 앱이 {@link 65 android.net.ConnectivityManager} API를 사용하여, 어떤 데이터 사용량 제한이 66적용되고 있는지를 확인할 수 있습니다. {@code getRestrictBackgroundStatus()} 67 메서드는 다음 값 중 하나를 반환합니다. 68</p> 69 70<dl> 71 <dt> 72 {@code RESTRICT_BACKGROUND_STATUS_DISABLED} 73 </dt> 74 75 <dd> 76 Data Saver가 비활성화되었습니다. 77 </dd> 78 79 <dt> 80 {@code RESTRICT_BACKGROUND_STATUS_ENABLED} 81 </dt> 82 83 <dd> 84 사용자가 이 앱에 대해 Data Saver를 활성화했습니다. 앱은 포그라운드에서 데이터 사용량을 85제한하고, 백그라운드 86데이터 사용량에 대한 제한을 적절히 처리하기 위해 노력해야 합니다. 87 </dd> 88 89 <dt> 90 {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED} 91 </dt> 92 93 <dd> 94 사용자가 Data Saver를 활성화했지만 앱이 허용 목록에 추가되어 있습니다. 앱은 95포그라운드 및 백그라운드 데이터 사용량을 제한하기 위해 여전히 노력해야 합니다. 96 </dd> 97</dl> 98 99<p> 100 Data Saver가 비활성화되어 있거나 앱이 허용 목록에 추가되어 있더라도, 101기기가 데이터 통신 네트워크에 연결될 때마다 항상 102 데이터 사용량을 제한하는 것이 좋은 방법입니다. 다음 샘플 코드에서는 {@link 103 android.net.ConnectivityManager#isActiveNetworkMetered 104 ConnectivityManager.isActiveNetworkMetered()} 및 {@code 105 ConnectivityManager.getRestrictBackgroundStatus()}를 사용하여 앱이 사용해야 하는 데이터의 양을 106결정합니다. 107</p> 108 109<pre> 110ConnectivityManager connMgr = (ConnectivityManager) 111 getSystemService(Context.CONNECTIVITY_SERVICE); 112// Checks if the device is on a metered network 113if (connMgr.isActiveNetworkMetered()) { 114 // Checks user’s Data Saver settings. 115 switch (connMgr.getRestrictBackgroundStatus()) { 116 case RESTRICT_BACKGROUND_STATUS_ENABLED: 117 // Background data usage is blocked for this app. Wherever possible, 118 // the app should also use less data in the foreground. 119 120 case RESTRICT_BACKGROUND_STATUS_WHITELISTED: 121 // The app is whitelisted. Wherever possible, 122 // the app should use less data in the foreground and background. 123 124 case RESTRICT_BACKGROUND_STATUS_DISABLED: 125 // Data Saver is disabled. Since the device is connected to a 126 // metered network, the app should use less data wherever possible. 127 } 128} else { 129 // The device is not on a metered network. 130 // Use data as required to perform syncs, downloads, and updates. 131} 132</pre> 133 134<h3 id="request-whitelist"> 135 허용 목록 권한 요청 136</h3> 137 138<p> 139 앱이 백그라운드에서 데이터를 사용해야 하는 경우, 앱의 패키지 이름의 URI가 포함된 140<code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> 141인텐트(예: 142<code>package:MY_APP_ID</code>)를 앱이 보내서 143허용 목록 권한을 요청할 수 있습니다. 144</p> 145 146<p> 147 인텐트와 URI를 보내면 <strong>Settings</strong> 앱이 시작되고 148앱에 대한 데이터 사용량 설정이 표시됩니다. 그러면 사용자는 앱에 대해 백그라운드 데이터의 149사용 여부를 결정할 수 있습니다. 이 인텐트를 보내기 전에, 150백그라운드 데이터 사용을 활성화하기 위해 151<strong>Settings</strong> 앱 시작 여부를 사용자에게 먼저 묻는 것이 152좋습니다. 153</p> 154 155<h2 id="monitor-changes"> 156 Data Saver 기본 설정 변경 사항 모니터링 157</h2> 158 159<p> 160 앱은 {@code 161 ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED}를 수신하기 위해 {@link 162 android.content.BroadcastReceiver}를 만들고 수신기를 {@link android.content.Context#registerReceiver 163 Context.registerReceiver()}에 동적으로 등록하여 164Data Saver 기본 설정의 변경 사항을 모니터링할 수 있습니다. 앱은 이 브로드캐스트를 수신할 때 {@code 165 ConnectivityManager.getRestrictBackgroundStatus()}를 호출하여 <a href="#status">새로운 Data Saver 기본 설정이 166권한에 영향을 미치는지 확인</a>해야 167합니다. 168</p> 169 170<p class="note"> 171 <strong>참고:</strong> 시스템에서는 {@link 172 android.content.Context#registerReceiver Context.registerReceiver()}로 동적으로 등록하는 앱에만 이 173브로드캐스트를 보냅니다. 이 174브로드캐스트를 수신하도록 매니페스트에 등록하는 앱은 175이를 수신하지 못합니다. 176</p> 177 178<h2 id="testing"> 179 Android 디버그 브리지 명령을 이용한 테스트 180</h2> 181 182<a href="{@docRoot}tools/help/adb.html">Android 디버그 브리지</a>는 183네트워크 권한을 확인하고 구성하는 데 사용될 수 있는 몇 가지 명령을 184제공합니다. 185 186<dl> 187 <dt> 188 <code>$ adb shell dumpsys netpolicy</code> 189 </dt> 190 191 <dd> 192 현재 전역 백그라운드 네트워크 193 제한 설정, 허용 목록에 현재 있는 패키지 UID 및 알려진 194다른 패키지의 네트워크 권한이 포함된 보고서를 생성합니다. 195 </dd> 196 197 <dt> 198 <code>$ adb shell cmd netpolicy</code> 199 </dt> 200 201 <dd> 202 Network Policy Manager(netpolicy) 명령의 전체 목록을 표시합니다. 203 </dd> 204 205 <dt> 206 <code>$ adb shell cmd netpolicy set restrict-background 207 <boolean></code> 208 </dt> 209 210 <dd> 211 <code>true</code> 또는 212 <code>false</code>를 각각 전달할 때 Data Saver 모드를 활성화하거나 비활성화합니다. 213 </dd> 214 215 <dt> 216 <code>$ adb shell cmd netpolicy add restrict-background-whitelist 217 <UID></code> 218 </dt> 219 220 <dd> 221 지정된 패키지 UID를 허용 목록에 추가하여 백그라운드 데이터 통신 연결을 222 허용합니다. 223 </dd> 224 225 <dt> 226 <code>$ adb shell cmd netpolicy remove restrict-background-whitelist 227 <UID></code> 228 </dt> 229 230 <dd> 231 지정된 패키지 UID를 허용 목록에서 제거하여, Data Saver가 활성화된 동안 백그라운드 데이터 통신 연결을 232차단합니다. 233 </dd> 234</dl>