2017-03-21 19 views
0

daggerを使ってokhttp3用のモジュールを作成しています。2.ネットワークモジュール内のインターネット接続を確認したいと思います。それを達成する最善の方法は何ですか?dagger 2のインターネット接続を確認する方法okhttp3

+0

あなたはそれがモジュールいることを実行したいと思うのはなぜ?その背後にある論理は何ですか? – azizbekian

+0

Okhttp3キャッシュのインターネット接続を確認したかったのですが。私はokhttp3のモジュールを作成しているので –

答えて

1

answers to this canonical questionのいずれかを見て、単純にカプセル化してください。例えば

、あなたはこのようなインターフェイスかもしれない。そして、

public class ExperimentalOnlineChecker implements OnlineChecker { 

    private final Runtime runtime; 

    public ExperimentalOnlineChecker(Runtime runtime) { 
     this.runtime = runtime; 
    } 

    @Override 
    public boolean isOnline() { 
     try { 
      Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
      int  exitValue = ipProcess.waitFor(); 
      return (exitValue == 0); 
     } 
     catch (IOException e)   { e.printStackTrace(); } 
     catch (InterruptedException e) { e.printStackTrace(); } 

     return false; 
    } 
} 

public interface OnlineChecker { 
    boolean isOnline(); 
} 

そして最もupvoted実装:

public class DefaultOnlineChecker implements OnlineChecker { 

    private final ConnectivityManager connectivityManager; 

    public DefaultOnlineChecker(ConnectivityManager connectivityManager) { 
     this.connectivityManager = connectivityManager; 
    } 

    @Override 
    public boolean isOnline() { 
     NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo(); 
     return netInfo != null && netInfo.isConnectedOrConnecting(); 
    } 
} 

2番目にupvoted実装を独自のモジュールまたは他の場所で、あなたが望む実装をバインドするだけです:

@Module 
public class OnlineCheckerModule { 

    @Provides 
    public OnlineChecker onlineChecker() { 
     Runtime runtime = Runtime.getRuntime(); 
     return new ExperimentalOnlineChecker(runtime); 
    } 
} 

は、今すぐあなたの活動や断片の内側には、単にプロパティインジェクションを使用して注入することができます

@Inject OnlineChecker onlineChecker; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super(savedInstanceState); 
    //perform injection with Dagger 2 and then you can use your 
    //OnlineChecker 
} 
関連する問題