Android四大基本组件之一 ,广播(broadcast receiver)---无序广播

时间:2022-12-21 12:05:13

                 学习Android,四大基本组件必不可少,那么今天,我们就一起来研究研究Android四大基本组件之一的广播(broadcast receiver)

                广播呢,又分为有序广播和无序广播,今天,我们主要说的是无序广播:

                什么是广播呢?举个例子,现如今,正是春运期间,我们都有在生活中有过这样的经验,在车站里,会有工作人员拿着喇叭告诉乘客每趟列车的详细时刻表,提醒乘客准时上车,这就是所谓的广播,而工作人员就是广播的发送者,乘客则属于广播的接收者

                再来个例子:想必大家应该都对电台有所了解吧,电台会有很多个,然而作为我们这些听电台的人而言,我们是根据电台的特有的名称去搜索听,电台的名称是固定的,不会变的,而我们是可以换频道的,那么,电台就是作为一个广播发送者,而我们就是广播接收者

               现在,我们就根据电台的这个例子来跟大家一起分享分享我所理解的无序广播:

               我模拟的是新建了三个model,作为三个应用程序,其中一个为sender发送者,也就是我们的电台,另外两个分别为接收者一号,接收者二号,也就是收听电台的人

               在发送者里,我在XML里设置了一个edittext编辑框(给它设置一个ID:et_main_content)和一个发送按钮(设置一个onclick事件,我取名为send),在编辑框里面里面输入我们自己想要发送的内容,然后点击发送按钮之后,接收者一号和接收者二号都会同时接收到编辑框里我们所输入的内容

                XML里面的控件设置完毕之后,我们在它对应的activity里面的oncreate方法里面取到编辑框的ID,new一个intent,并且给我们自己的电台设置一个名字,然后我们就可以在onclick事件方法里面得到编辑框里面我们所输入的内容:

String content=et_main_content.getText().toString();

               然后我们把数据携带过来            intent.putExtra("data",content);

    最后将广播发送过去,发送者的代码就可以告一段落了   sendBroadcast(intent);

    接下来我们开始接收信息:

       作为广播的接收者,我们要做的就是得到电台的名字,然后通过电台的名字去搜索这个电台从而听取电台内容

       所以,在这里,我们可以新建一个class,我在这里取名为MyReceived01和MyReceived02,让他们都继承BroadReceiver,在他的生命周期OnReceiver方法里做一个判断,如果名字与我们的电台名字一致,那么就接收

if ("sender.955".equals(intent.getAction())){
String data=intent.getStringExtra("data");
Log.i("test","01号广播接受者收到广播了"+data);
}
    写完这个activity之后,最后我们再去manifests里面配置接收,那么,接收者这边的代码也就可以告一段落了
   
 <receiver android:name=".MyReceived01">
<intent-filter>
<action android:name="sender.955"></action>
</intent-filter>
</receiver>
另外一个接收者也和这个一样写完这个activity之后,再去manifests里面配置接收,只需要将名字改为MyReceived02即可,这样,一个简单的发送接收就OK了
接下来,我们再来分享分享怎样动态注册广播:我们就直接引用MyReceived02,上面说到他在里面有一个判断,
那么我们可以在mainactivity里面的oncreate方法中new一个MyReceived02,然后在在里面写一个过滤器,
myReceived02 = new MyReceived02();intentFilter = new IntentFilter();intentFilter.addAction("sender.955");
接着,在activity生命周期的OnResume方法里面动态注册广播,将接收者和过滤器放进去
registerReceiver(myReceived02,intentFilter);

最后的最后,别忘记了将他给注销掉,我们可以选择在activity生命周期的OnDestroy方法里面将他销毁掉
unregisterReceiver(myReceived02);