ConnectivityManager.isActiveNetworkMeteredな件

2012-10-08T00:00:00+00:00 Android Java

なんかどっかで見た気がするのですが、例えばでかいファイルをダウンロードする必要性がある場合に3GではなくWi-Fiを使ってダウンロードさせたい。っていうか正しいのかは曖昧なんですが、「通信制限が存在するネットワークでダウンロード処理を継続しない」っていう処理をする場合等に使える模様。

http://y-anz-m.blogspot.jp/2012/07/google-io-2012-whats-new-in-android.html によると、ConnectivityManager.isActiveNetworkMeteredは現在の通信が測定されているか(ダウンロードにリミットが課されているか)をアプリから検知するとの事らしい。んで、これAPI Level 16(Jelly Beans)な模様なんですが、android-support-v4.jarにandroid.support.v4.net.ConnectivityManagerCompatっていうのがあってこれを使う事でAPI Level 16以下でも利用可能な模様。という事で書いてみる。ACCESS_NETWORK_STATEのパーミッションが必要

package sample.test;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.support.v4.net.ConnectivityManagerCompat;
import android.app.Activity;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ConnectivityManager cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
        ConnectivityManagerCompat cmc = new ConnectivityManagerCompat();

        boolean isNetworkMetered = cmc.isActiveNetworkMetered(cm);
    }
}

API Level 16であればConnectivityManager.isActiveNetworkMeteredで良い。あくまでsupport.v4なやつを使う場合はこんな感じ。でこのisNetworkMeteredの値は

  • ネットワークがそもそもつながってない -> true
  • 3Gネットワーク(制限あり?)が確立している場合 -> true
  • Wi-Fiネットワークが確立している場合 -> false

どういう場合にtrueになるのかが微妙な所なんですが、例えば社内で提供されているネットワークでそういう設定をなされていたり場合等はどうなるのかっていう疑問もちょっとある

んまぁとりあえずそんな感じっていう事にしとく

SAStrutsを勉強してみる (8) - ファイルアップロード - SAStrutsを勉強してみる (7) - LoginInterceptorをテスト -