动态注册
- 在代码中注册
- 一定要取消注册,unregisterReceiver()
- 在程序启动后才能收到广播,因为注册的逻辑写在OnCreate里面的
静态注册
- 在AndroidManifest.xml中注册
- 可以在程序未启动的情况下收到广播
动态注册过程
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private MyDynamicReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("这里写你的Action");
myReceiver = new MyDynamicReceiver();
registerReceiver(myReceiver,intentFilter);//动态注册
}
private class MyDynamicReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//写下收到广播后所执行的操作
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);//取消注册
}
}
静态注册过程
1.新建一个自己的Receiver类
public class MyStaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//写下收到广播后所执行的操作
}
}
2.在AndroidManifest进行注册
exported | 当前broadcast Receiver 是否可以从当前应用外部获取Receiver message |
enabled | 这个属性用于指定 Android系统能否实例化应用程序组件 |
<receiver android:name=".MyStaticReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="这里写你的Action"></action>
</intent-filter>
</receiver>
其他
不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开线程的,当onReceiver()方法运行了较长时间而没有结束时.程序会报错