广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播接收时,广播接收器就能收到该广播,并在内部处理其相应的逻辑。广播注册的方法有两种,在代码中注册与在AndridManifest.xml中注册,前者称为动态注册,后者为静态注册,接下来我们就说说关于动态注册的实现。
第一步:新建一个类,让其继承BroadcastReceiver,然后重写父类中的onReceive()方法,原理是当有广播来临时,onReceive()方法就会得到执行
我们新建BroadTest项目,修改MainActivity中的代码,在MainActivity中写一个内部类NetworkChangeReceiver
//新建此类,让其继承BroadcastReceiver,并且重写onCreate方法
public class NetworkChangeRecever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connecttivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);//使用getSystemService得到ConnectivityManager实例
NetworkInfo networkInfo=connecttivityManager.getActiveNetworkInfo();
if(networkInfo!=null && networkInfo.isAvailable()) {
Toast.makeText(context,"networks is available", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(context,"networks is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
}
使用getSystemService()方法得到ConnectivityManger的实例,这是一个系统服务类,专门用于网络连接。
然后用它的getActiveNetworkInfo()方法得到NetworkInfo的实例
再用NetworkInfo的方法isAvailable()来判断是否有网,一目了然!
第二步:回到onCreate方法中创建实例实现方法
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeRecever networkChangeRecever;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//添加广播
networkChangeRecever=new NetworkChangeRecever();
registerReceiver(networkChangeRecever,intentFilter);//使用registerReceiver方法进行注册,将两实例都传进去
}
首先创建IntentFilter实例,给它添加一个值为"android.net.conn.CONNECTIVITY_CHANGE"的action,这个值的作用就是监听广播,不同action有不同的作用,这里不再深究
接下来创建NetworkChangeRecever实例,调用registerReceiver方法进行注册,将IntentFilte与NetworkChangeRecever的实例都传进去,这样NetworkChangeRecever就会收到值为"android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了监听网络变化的功能
第三步:动态注册的广播接收器一定要取消实现才行
public void onDestory()
{
super.onDestroy();
unregisterReceiver(networkChangeRecever);
}
调用 unregisterReceiver()方法实现
第四步:声名网络系统的访问权限
在AndridManifest.xml中加入一行
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
就可以了!!!
注:运行时不要按back键,否则onCreate()方法会执行,应该按home键,然后在setting中找到Data usage,尝试开关网络设置按钮(Cellular date),可观察变化
仅供参考@.@