読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

NのDataSaverを試してみた

概要

Android N Developer preview2に入っているDataSaverの挙動を調べてみた

詳細

What's DataSaver?

アプリのバックグラウンド通信を禁止することにより、モバイル通信量を少なくする機能
WIFI環境に入ればバックグラウンドは自動的に行われる
また、ホワイトリストに対象アプリを入れることで、バックグラウンド通信を許可するアプリも設定することが可能になる

開発環境構築

まずはAndroid Nの開発環境作るところから
プレビューのセットアップ | Android Developers
今回は公式も日本語版の説明を用意してくれており非常にわかりやすかった

簡単に箇条書きにすると

  • Android Studio 2.1を入手
  • N用のAndroid SDK入手
  • Java8を入手、設定
  • gradleファイルを以下のように設定
android {
  compileSdkVersion 'android-N'
  buildToolsVersion '24.0.0-rc1'
  ...

  defaultConfig {
     minSdkVersion 'N'
     targetSdkVersion 'N'
     ...
  }
  ...
}

端末のDataSaverモードをONにする

設定 > データ使用量 > データセーバー に移動し、ONに設定
f:id:tiro105:20160504162727p:plain

データへの無制限アクセスからホワイトリストの設定が可能
f:id:tiro105:20160504163033p:plain
f:id:tiro105:20160504163049p:plain

アプリからDataSaverモードを確認する

ConnectivityManagerを使って確認する
ManifestにNETWORK_STATEの権限を追加

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        int restrictBackgroundStatus = connectivityManager.getRestrictBackgroundStatus();

        switch (restrictBackgroundStatus) {
            case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED:
                Log.v("TAG", "RESTRICT_BACKGROUND_STATUS_DISABLED");
                break;
            case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED:
                Log.v("TAG", "RESTRICT_BACKGROUND_STATUS_ENABLED");
                break;
            case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED:
                Log.v("TAG", "RESTRICT_BACKGROUND_STATUS_WHITELISTED");
                break;

        }

・・・が、preview2で確認したところDataSaverをONにしたらENABLEが帰ってきて、OFFにしたらDISABLEが帰ってきた(ホワイトリストはちゃんと帰ってきた)
バックグラウンドのステータスなので逆じゃない?
でもRESTRICTだからこれでいいのかな?禁止中がenableになってるってことかなー
一応Issueを投げてはおいたので、答え待ち