介绍:
网上常说广播是组件,在我看来它并不能称为组件。
它更应该被称为是系统提供的消息自定义处理机制。
系统不能满足所有人的需求,那就让你自己去实现。
当系统或者程序某些状态被触发,需要做对应的处理
比如:系统启动,程序跟随启动,实现开机启动功能。
分类:
广播的传播分为两类:有序,无序
有序:优先级最高的先接收,可截断消息,不在向后传播
无序:大家都能接收,没有优先级区分,也不能阻止传播
接收:
当某个消息发出,我要做出对应处理,那就需要注册
有两种方式注册:动态注册(代码中),静态注册(xml)
class MainActivity extends AppCompatActivity {
NewClassName newClassName;
Intent intentFilter;
//动态注册
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//设置要接收的广播消息
intentFilter=new Intent("");
//实例化广播接收者
newClassName=new NewClassName();
//向系统注册
registerReceiver(NewClassName,Intent);
}
//继承广播接收者,重写广播处理函数
class NewClassName entends BroadcastReceiver{
@Override
onReceiver{
//处理代码
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//生命周期结束的时候,取消注册
unregisterReceiver(newClassName);
}
}
//.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nihuai.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Main2Activity" />
//静态注册
<receiver
//处理函数所在的类
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
//设置接受的广播消息
<intent-filter>
//BOOT_COMPLETED:系统开机
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
//.java
class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
//继承广播接收者,重写广播处理函数
class MyReceiver entends BroadcastReceiver{
@Override
onReceiver{
//处理代码
}
}
}
发送:
现在我们发送自定义的广播,记住要接收并处理,不然发了没意义。
接收时的广播消息要和发送时的广播消息匹配,不然接收不到广播。
//发送无序广播
sendBroadcasts();
//发送有序广播
sendOrderedBroadcasts();
总结:
接收系统定义的广播或者程序自定义广播,并进行处理。
满足不同人的不同需求,让程序具有更多的变化和扩展。
参考:
第一行代码第2版