广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时, 广播接收器就能够收到该广播,并在内部处理相应的逻辑。注册广播的方式一般有两种。
在代码中注册和在AndroidManifest.xml 中注册, 其中前者也被称为动态注册, 后者也被称为静态注册。

我们要怎样监听手机的网络变化呢?

只需要新建一个类, 让它继承自BroadcastReceiver,并重写父类的 onReceive()方法就行了。 这样当有广播到来时, onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理

所以我们先新建一个继承与BroadCastReceiver的内部类,

    class NetworkChangeReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();            if (networkInfo != null && networkInfo.isAvailable()) {                Toast.makeText(context, "网络打开",                        Toast.LENGTH_SHORT).show();            }            else {                Toast.makeText(context, "网络关闭",                        Toast.LENGTH_SHORT).show();            }        }    }

可以看到,我们在 MainActivity 中定义了一个内部类 NetworkChangeReceiver,这个类是继承自 BroadcastReceiver 的,并重写了父类的 onReceive()方法。 这样每当网络状态发生变化时,onReceive()方法就会得到执行

然后我们通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。 然后调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例*

接着调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了,最后我们通过 Toast 的方式对用户进行提示。

在MainActivity中我们对这个类进行调用

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private IntentFilter intentFilter;    private NetworkChangeReceiver networkChangeReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intentFilter = new IntentFilter();        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//为过滤器添加 广播过滤        networkChangeReceiver = new NetworkChangeReceiver();        registerReceiver(networkChangeReceiver, intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(networkChangeReceiver);    }    class NetworkChangeReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);            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.net.conn.CONNECTIVITY_CHANGE 的广播

注册这个接收器 这样就能监听网络的变化了,但是我们还是需要在Manifest文件中添加权限,不然就会停止工作*

添加这个权限就能正常工作了

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

更多相关文章

  1. Android之对反射的应用
  2. 【Dialog】7种形式的Android(安卓)Dialog举例
  3. 对于Android日夜间模式实现的探讨
  4. 高效android编程
  5. Android平台上四种保存数据的方法
  6. android ctivity完美退出
  7. Android自动接听&挂断电话(包含怎么应对4.1以上版本的权限检查)
  8. Android(安卓)侧滑关闭Activity的实例
  9. android listView 到上下边界 蓝色或黄色阴影去除方法

随机推荐

  1. 模仿android新浪微博手机客户端项目
  2. Android——检测TXT文件中是否含有双字节
  3. Android(安卓)广播大全 Intent Action 事
  4. Android(安卓)命令 - sqlite3
  5. Android(安卓)WebView学习
  6. 安卓霓虹灯效果
  7. Button 有按下效果
  8. Android WebView使用总结
  9. ViewPager无限循环实现画廊式banner
  10. Android下载文件常见错误解决方法