动态注册广播

来源:互联网 发布:红帽子linux下载 编辑:程序博客网 时间:2024/05/21 06:13

广播分为有序广播(Ordered brodcasts)和无序广播(Normal broadcasts)

有序广播是一种同步执行的广播,在同一时间段,只有一个广播发出,只有等这个广播执行完,才会发向下一个广播,这种广播可以截断

无序广播时默认广播,是一种异步执行的操作,广播发出后,无法截断。


广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为静态注册,后者成为动态注册

那么如何创建一个广播接收器呢?其实只需要创建一个类,然后继承Broadcast Receive然后重写onReceive()方法就可以啦,当有广播到来时,onReceive()方法会自动调用


动态注册广播:

一:创建一个IntentFilter对象。

二:使用IntentFilter对象的setAction方法添加一个监听对象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));

三:创建一个类,继承BroadcastReceiver类,实现里面的Onreceive方法();在Onreceive方法里面通过getSystemService(Context.CONNECTIVITY_SERVICE);获取到ConnectivityManager对象;调用ConnectivityManager里面的getActiveNetworkInfo()方法获取到NetWorkInfo对象,判断netWorkInfo对象是否为非空&&info.isAvailable()

那么为有网络,反之为没有网络。

四:使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收

五:在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)

六:在清单文件中加入android.permission.ACCESS_NETWORK_STATE权限,用于查询是否有网络

代码:

public class MainActivity extends Activity { private IntentFilter intentFilter; Broadcasts broadcast; protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intentFilter = new IntentFilter();//      监听网络变化        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");        broadcast = new Broadcasts();//      注册广播        registerReceiver(broadcast, intentFilter);    } protected void onDestroy() {  super.onDestroy();  unregisterReceiver(broadcast); } class Broadcasts extends BroadcastReceiver {  public void onReceive(Context arg0, Intent arg1) {   ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);   NetworkInfo info = manager.getActiveNetworkInfo();   if(info !=null && info.isAvailable())   {    Toast.makeText(MainActivity.this, "有网络", 0).show();   }   else   {    Toast.makeText(MainActivity.this, "木有网络", 0).show();   }  } }}


 



 

0 0
原创粉丝点击