动态注册广播接收器并监听网络变化(一个广播接收器的实例)

因为Android的权限机制,我们先要加上一条权限:

 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   

实现步骤:

  1. 实例化IntentFilter类
  2. 给IntentFilter的实例添加一个action
  3. 实例化创建好的广播接收器
  4. 注册广播
  5. 在广播接收器重写的方法中写对应的逻辑
  6. 取消注册

实例代码:

public class TestBroadCastActivity extends AppCompatActivity {

    /**
     * 动态注册并使用广播接收器
     */

    private IntentFilter intentFilter;
    private NetChangeReceiver netChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_broad_cast);

        intentFilter = new IntentFilter();
        // 添加action,当网络情况发生变化时,系统就是发送一条值为android.net.conn.CONNECTIVITY_CHANGE的广播
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        netChangeReceiver = new NetChangeReceiver();
        // 注册广播
        registerReceiver(netChangeReceiver, intentFilter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消注册,动态注册的广播接收器一定要取消注册才行
        unregisterReceiver(netChangeReceiver);
    }

    // 创建一个名为NetChangeReceiver的广播接收器
    class NetChangeReceiver extends BroadcastReceiver {

        // 当接收到广播,便执行onReceive()方法
        @Override
        public void onReceive(Context context, Intent intent) {
            // 判断当前的网络情况,并给出提示

            // 通过getSystemService()方法得到ConnectivityManager的实例
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            // 通过ConnectivityManager得到NetworkInfo的实例
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

            if (networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(context, "当前网络连接正常", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "无网络连接", Toast.LENGTH_SHORT).show();
            }

        }
    }


}

你可能感兴趣的:(Android开发)