Android:互联网连接更改监听器

我已经有了这段侦听连接性更改的代码-


public class NetworkStateReceiver extends BroadcastReceiver

{

  public void onReceive(Context context, Intent intent)

  {

    Log.d("app","Network connectivity change");


    if(intent.getExtras() != null)

    {

      NetworkInfo ni = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);

      if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED)

      {

        Log.i("app", "Network " + ni.getTypeName() + " connected");

      }

    }


    if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE))

    {

      Log.d("app", "There's no network connectivity");

    }

  }

}

我使用此代码检查Internet连接-Internet Check


但是问题是,如果网络突然失去了互联网连接而没有任何连接更改,则此代码将无用。有什么方法可以创建广播接收器侦听器以更改Internet连接吗?我有一个Web应用程序,突然的Internet连接更改会引起问题。


LEATH
浏览 534回答 3
3回答

白板的微信

更新:如果目标为Android 7.0(API级别24)及更高版本的应用在清单中声明了广播接收器,则不会接收CONNECTIVITY_ACTION广播。如果应用向Context.registerReceiver()注册其BroadcastReceiver,并且该上下文仍然有效,则它们仍将接收CONNECTIVITY_ACTION广播。您需要通过registerReceiver()方法注册接收器: IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); mCtx.registerReceiver(new NetworkBroadcastReceiver(), intentFilter);

莫回无

api 28+中已弃用 ConnectivityAction 。相反registerDefaultNetworkCallback,只要支持api 24+,就可以使用。在科特林:val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManagerconnectivityManager?.let {    it.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {        override fun onAvailable(network: Network) {            //take action when network connection is gained        }        override fun onLost(network: Network?) {            //take action when network connection is lost        }    })}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android