page.title=データセーバー metaDescription= ユーザーが有効にしたデータ使用量の最適化。 page.keywords="android N", "data usage", "metered network" page.image=images/cards/card-nyc_2x.jpg @jd:body
スマートフォンのライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを簡単に上回ります。 N Developer Preview では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、データの使用を抑えるために端末全体でデータセーバーを有効にできます。
ユーザーが [Settings] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムはバックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。 ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制課金接続を使用できます。
N Developer Preview は {@link android.net.ConnectivityManager} API を拡張することで、ユーザーのデータセーバー設定を取得する方法と、設定の変更を監視する方法を提供しています。 アプリでユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を抑えるようにすることをお勧めします。
N Developer Preview では、アプリは {@link android.net.ConnectivityManager} API を使用して、どのようなデータ使用量の制限が適用されているかを確認できます。 {@code getRestrictBackgroundStatus()} メソッドは以下のいずれかの値を返します。
データセーバーが無効になっている場合や、アプリがホワイトリストに登録されている場合でも、端末が従量制課金ネットワークに接続されている場合は、データ使用量を抑えることをお勧めします。 以下のサンプルコードでは、アプリで使用する必要があるデータ量を確認するために、{@link android.net.ConnectivityManager#isActiveNetworkMetered ConnectivityManager.isActiveNetworkMetered()} と {@code ConnectivityManager.getRestrictBackgroundStatus()} を使用しています。
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. }
アプリがバックグラウンドでデータを使用する必要がある場合は、アプリのパッケージ名(例: package:MY_APP_ID
)の URI を含む Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
インテントを送信することでホワイトリスト パーミッションをリクエストできます。
インテントと URI を送信すると、[Settings] アプリが起動し、アプリのデータ使用量の設定が表示されます。 ユーザーはアプリのバックグラウンドデータを有効にするかどうかを決めることができます。 このインテントを送信する前に、バックグラウンドでのデータ使用を有効にするために [Settings] アプリを起動するかどうかを最初にユーザーに尋ねることをお勧めします。
アプリでデータセーバー設定の変更を監視するには、{@link android.content.BroadcastReceiver} を作成して {@code ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} をリッスンし、レシーバーを動的に {@link android.content.Context#registerReceiver Context.registerReceiver()} に登録します。 このブロードキャストを受信したアプリは、{@code ConnectivityManager.getRestrictBackgroundStatus()} を呼び出して、新しいデータセーバー設定がそのパーミッションに影響を及ぼすかどうかを確認する必要があります。
注:このブロードキャストは、{@link android.content.Context#registerReceiver Context.registerReceiver()} を使用してブロードキャストに動的に登録するアプリにのみ送信されます。 マニフェストにこのブロードキャストを受信するために登録するアプリはこれらを受信しません。
$ adb shell dumpsys netpolicy
$ adb shell cmd netpolicy
$ adb shell cmd netpolicy set restrict-background
<boolean>
true
または false
をそれぞれ渡したときに、データセーバー モードを有効または無効にします。
$ adb shell cmd netpolicy add restrict-background-whitelist
<UID>
$ adb shell cmd netpolicy remove restrict-background-whitelist
<UID>