代码之家  ›  专栏  ›  技术社区  ›  dudi

如何以编程方式注册网络连接更改接收器?

  •  0
  • dudi  · 技术社区  · 7 年前

    所以我写了一个这样的广播接收器:

    class NetworkReceiver() : BroadcastReceiver() {
    
    override fun onReceive(context: Context?, intent: Intent?) {
    
        if (isNetworkConnected(context)) {
            //do some stuff
        } else {
            //do smoke stuff
        }
    }
    
    private fun isNetworkConnected(context: Context?): Boolean {
        val connectivityManager: ConnectivityManager? = context?.getSystemService(Context.CONNECTIVITY_SERVICE)
                as ConnectivityManager?
        if (connectivityManager != null) {
            if (Build.VERSION.SDK_INT < 23) {
                val networkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo
                if (networkInfo != null) {
                    return networkInfo.isConnected
                            && networkInfo.type == ConnectivityManager.TYPE_WIFI
                            || networkInfo.type == ConnectivityManager.TYPE_MOBILE
                }
            } else {
                val network: Network? = connectivityManager.activeNetwork
                if (network != null) {
                    val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
                    return (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN))
                }
            }
        }
        return false
    }
    

    我的问题是如何在活动中注册此广播接收器以触发 NetworkReceiver IntentFilter 我应该用吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Karan Khurana    7 年前

    广播接收机

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.util.Log;
    
    import static com.keshav.networkchangereceiverexample.MainActivity.dialog;
    
    public class NetworkChangeReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            try
            {
                if (isOnline(context)) {
                    dialog(true);
                    Log.e("keshav", "Online Connect Intenet ");
                } else {
                    dialog(false);
                    Log.e("keshav", "Conectivity Failure !!! ");
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
    
        private boolean isOnline(Context context) {
            try {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                //should check null because in airplane mode it will be null
                return (netInfo != null && netInfo.isConnected());
            } catch (NullPointerException e) {
                e.printStackTrace();
                return false;
            }
        }
    }
    

    在清单文件中:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <receiver android:name=".receivers.NetworkChangeReceiver">
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
    </receiver>
    
        2
  •  1
  •   Daniel Siaras    7 年前

    private NetworkReceiver reciver;
    
    
    @Override
        protected void onStart() {
            super.onStart();
    
            reciver = new NetworkReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
            this.registerReceiver(reciver, filter);
        }
    
    
          @Override
        protected void onDestroy() {
            super.onDestroy();
            this.unregisterReceiver(reciver);
    
        }
    
    推荐文章