使用okhttp Interceptor检查网络连接

问题描述 投票:1回答:1

我们是否可以使用Interceptor来检查网络连接并继续进行连接?

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

android okhttp
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.