5

ここで指定されたコードを使用しています。

これらのコード ブロックをクラスとしてプロジェクトの util パッケージに入れました。そして、メインの活動クラスで私はこれを書きました..

class MenuActivity {

// Variable declaration
  private final CompositeSubscription mConnectionSubscription = new CompositeSubscription();

@Override
protected void onCreate(Bundle savedInstanceState) {

    // Some initialisation of UI elements done here

    mConnectionSubscription.add(AppObservable.bindActivity(this, NetworkUtils.observe(this)).subscribe(new Action1<NetworkUtils.State>() {
        @Override
        public void call(NetworkUtils.State state) {
            if(state == NetworkUtils.State.NOT_CONNECTED)
                Timber.i("Connection lost");
            else
                Timber.i("Connected");
        }
    }));

}

私の目標は、変更を監視し、ネットワークが true false に変わるたびに静的に MyApp クラスで定義された変数 MyApp.isConnected を変更することです。助けていただければ幸いです。ありがとうございました

4

2 に答える 2

9

あなたは別のスレッドで私に答えを求めました。ソリューションの開発とテストに時間が必要だったため、回答が遅くなりました。これで十分だと思います。

最近、ReactiveNetworkという新しいプロジェクトを作成しました。

これはオープンソースであり、https ://github.com/pwittchen/ReactiveNetwork で入手できます。

build.gradle次の依存関係をファイルに追加できます。

dependencies {
  compile 'com.github.pwittchen:reactivenetwork:x.y.z'
}

x.y.zその後、最新のバージョン番号に置き換えることができます。

その後、次の方法でライブラリを使用できます。

 ReactiveNetwork.observeNetworkConnectivity(context)        
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<ConnectivityStatus>() {
      @Override public void call(Connectivity connectivity) {
        if(connectivity.getState() == NetworkInfo.State.DISCONNECTED) {
          Timber.i("Connection lost");
        } else if(connectivity.getState() == NetworkInfo.State.CONNECTED) {
          Timber.i("Connected");
        }
      }
    });

filter(...)単一のタイプのイベントにのみ反応したい場合は、RxJava のメソッドを使用することもできます。

メソッドでサブスクリプションを作成し、Activity 内onResume()のメソッドでサブスクリプションを解除できます。onPause()

GitHub のプロジェクトの Web サイトで、その他の使用例とサンプル アプリを見つけることができます。

さらに、現在ライブラリで使用されている Android API からNetworkInfo.State列挙型について読むことができます。

于 2015-08-24T10:26:29.590 に答える