广播接收者介绍
BroadCastReceiver广播接受者,安卓四大组件之一
Activity是接收者,静态注册和动态注册的区别:
动态注册:
(1)广播接收者会跟Activity的生命周期结束而结束
(2)自由的控制注册和取消
静态注册:
(1)广播接收者不会跟随Activity的生命周期结束而结束,会一直存在,即使应用程序关闭,也会被唤醒接收广播
(2)全局的广播
静态注册+无序广播(标准广播)
广播接收者
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("aaa","接受者isHere");
}
}
清单文件:priority控制优先级,-1000至1000 优先级越大越先被广播
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="god" />
</intent-filter>
</receiver>
java代码
Intent intent = new Intent();
intent.setAction("god");
sendBroadcast(intent);
动态注册+有序广播
广播接收者
public class MyReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (isOrderedBroadcast()) {
Log.i("aaa", "有序接收者~~~");
//如果是有序广播就截断
// abortBroadcast();
}
}
}
清单文件:因为是动态注册所以频道不需要加
<receiver
android:name=".MyReceiver2"
android:enabled="true"
android:exported="true">
</receiver>
java代码
public class MainActivity extends AppCompatActivity {
private MyReceiver2 myReceiver2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态注册广播接收者
myReceiver2 = new MyReceiver2();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("youxu");
registerReceiver(myReceiver2, intentFilter);
}
public void onClick(View view) {
Intent intent2 = new Intent();
intent2.setAction("youxu");
sendOrderedBroadcast(intent2, null);
}
@Override
protected void onDestroy() {
super.onDestroy();
//一定要调用unregisterReceiver方法取消广播以防变卡
unregisterReceiver(myReceiver2);
}
}