静态注册第一个接收器
public class MyReceiver1 extends BroadcastReceiver { public MyReceiver1() { Log.e("TAG", "MyReceiver1()"); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getStringExtra("action"); Log.e("TAG", "MyReceiver1 onReceive() "+action); } }
<receiver android:name="com.atguigu.l08_br.MyReceiver1"> <intent-filter> <action android:name="com.atguigu.l08_br.MyReceiver1.action"/> </intent-filter> </receiver>
静态注册创建的是类,并没有执行new MyReceiver1()
动态注册第二个接收器
public class MyReceiver2 extends BroadcastReceiver { public MyReceiver2() { Log.e("TAG", "MyReceiver2()"); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getStringExtra("action"); Log.e("TAG", "MyReceiver2 onReceive() "+action); } }
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } private MyReceiver2 receiver; /* * 注册广播接收器 */ public void registBR(View v) { if(receiver==null) { //创建receiver对象 receiver = new MyReceiver2(); //创建过滤器对象 IntentFilter filter = new IntentFilter("com.atguigu.l08_br.MyReceiver1.action"); //注册receiver registerReceiver(receiver, filter); Toast.makeText(this, "注册广播接收器", 0).show(); } else { Toast.makeText(this, "已经注册了广播接收器", 0).show(); } } public void unRegistBR(View v) { if(receiver!=null) { unregisterReceiver(receiver); receiver = null; Toast.makeText(this, "解注册广播接收器", 0).show(); } else { Toast.makeText(this, "还没有注册广播接收器", 0).show(); } } @Override protected void onDestroy() { super.onDestroy(); if(receiver!=null) { unregisterReceiver(receiver); receiver = null; } } }
发送广播
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //发送一般广播 public void sendNormalBC(View v) { Intent intent = new Intent("com.atguigu.l08_br.MyReceiver1.action"); intent.putExtra("action", "gaogao"); sendBroadcast(intent ); Toast.makeText(this, "发送一般广播", 0).show(); } //发送有序广播 public void sendOrderBC(View v) { Intent intent = new Intent("com.atguigu.l08_br.MyReceiver.action2"); intent.putExtra("action", "TATA"); sendOrderedBroadcast(intent, null); Toast.makeText(this, "发送有序广播", 0).show(); } }
广播优先级
一般广播,接收器同时接收,有序广播默认是manifest receiver注册的顺序,通过更改priority可以修改receiver的优先级,例如以上发送了orderBc
public class MyReceiver3 extends BroadcastReceiver { public MyReceiver3() { Log.e("TAG", "MyReceiver3()"); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getStringExtra("action"); Log.e("TAG", "MyReceiver3 onReceive() "+action); } }
public class MyReceiver4 extends BroadcastReceiver { public MyReceiver4() { Log.e("TAG", "MyReceiver4()"); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getStringExtra("action"); Log.e("TAG", "MyReceiver4 onReceive() "+action); if(isOrderedBroadcast()) { //中断广播 abortBroadcast(); } } }
<receiver android:name="com.atguigu.l08_br.MyReceiver3"> <intent-filter android:priority="1000"> <action android:name="com.atguigu.l08_br.MyReceiver.action2"/> </intent-filter> </receiver> <receiver android:name="com.atguigu.l08_br.MyReceiver4"> <intent-filter android:priority="2147483647"> <action android:name="com.atguigu.l08_br.MyReceiver.action2"/> </intent-filter> </receiver>