使用okhttp Interceptor检查网络连接

时间:2015-03-02 09:11:41

标签: android okhttp

我们是否可以使用拦截器来检查网络连接,如果只是连接就继续?

注意:我正在谈论如何使用okhttp拦截器来统一网络连接检查。

1 个答案:

答案 0 :(得分:1)

当互联网连接发生变化时,您可以使用BroadcastReceiver通知您的应用。

清单:

<receiver android:name="com.example.app.ConnectivityChangeReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

BroadcastReceiver本身:

public class ConnectivityChangeReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      if (isOnline(context)) {
         debugIntent(intent, "grokkingandroid");
      }
   }

   private boolean isOnline(Context context) {
      ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo netInfo = cm.getActiveNetworkInfo();
      return (netInfo != null && netInfo.isConnected());
   }

   private void debugIntent(Intent intent, String tag) {
      Log.v(tag, "action: " + intent.getAction());
      Log.v(tag, "component: " + intent.getComponent());
      Bundle extras = intent.getExtras();
      if (extras != null) {
         for (String key: extras.keySet()) {
            Log.v(tag, "key [" + key + "]: " +
               extras.get(key));
         }
      }
      else {
         Log.v(tag, "no extras");
      }
   }
}

As in

More on BroadcastReceiver

更新备注:

  

此外,针对Android 7.0及更高版本的应用必须使用registerReceiver(BroadcastReceiver,IntentFilter)注册CONNECTIVITY_ACTION广播。在清单中声明接收器不起作用。

有关其他选项,请参阅the docs