BroadcastReceiver(无序广播)

       今天了解了BroadcastReceiver,也就是广播接收者,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播体现在方方面面,比如说开机、电量改变、收发短信、拨打电话、屏幕解锁等等。

现在我来演示一下创建BroadcastReceiver,并且能够接收我们所需要的消息。
我们先建一个sender(发送端)的项目,写一个发送端的界面,界面代码如下:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"
android:layout_width="match_parent"android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.smz.a0831_android_sender.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入广播内容"
android:id="@+id/et_main_content"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送"
android:onClick="send"
/>
LinearLayout>
public void send(View view){
String content=et_main_content.getText().toString();
intent.putExtra("data",content);
//发送广播(无序广播)
sendBroadcast(intent);
}
发送端我们写好了现在我们写接收端,我们首先创建一个广播接收者,名为MyReceived01:
public class MyReceived01 extends BroadcastReceiver {
@Override
public voidonReceive(Context context, Intent intent) {
if("com.example.smz.a0831_android_sender.955".equals(intent.getAction()));
String data=intent.getStringExtra("data");
Log.i("test","01号接收者收到广播:"+data);
}
第二步:注册BroadcastReceiver
一旦实现了BroadcastReceiver,接下就应该指定该BroadcastReceiver能匹配的Intent即注册BroadcastReceiver。
注册BroadcastReceiver的方式有两种:(动态广播的优先级比静态要高)
第一种是静态注册:
这种方法是在配置AndroidManifest.xml配置文件中注册,通过这种方式注册的广播为常驻型广播,
也就是说如果应用程序关闭了,有相应事件触发程序还是会被系统自动调用运行。例如:


<receiver android:name=".MyReceived01">
<intent-filter>
<action android:name="com.example.smz.a0831_android_sender.955">action>
intent-filter>
receiver>
配置完了后,只要是com.example.smz.a0831_android_sender.955这个地址的广播,MyReceived01都能接收到。
注:这里我写两个接收端,两个接收端代码都差不多,只需要改下命名即可)。
第二种: 动态注册:
public classMainActivityextendsAppCompatActivity {
private MyReceived02 myReceived02;
private IntentFilter intentFilter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceived02 = new MyReceived02();
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.smz.a0831_android_sender.955");
}
@Override
protected voidonResume() {
super.onResume();
//注册广播
registerReceiver(myReceived02,intentFilter);
}
注意,registerReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,
所以可以直接调用。在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,
当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。
所以,记得在特定的地方执行解除注册操作:
//注销
@Override
protected voidonDestroy() {
super.onDestroy();
unregisterReceiver(myReceived02);
}
黏性广播:它分为有序黏性和无序黏性,它只需要在发送端写如下代码
//发送黏性广播
sendStickyBroadcast(intent);就好了。
然后在添加一个黏性个广播的权限即可

<uses-permissionandroid:name="android.permission.BROADCAST_STICKY">uses-permission>




        

你可能感兴趣的:(Android)