broadcast example
public class MyReceiver1 extends BroadcastReceiver { private static final String TAG = "CM-MyReceiver1"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "msg:" + intent.getStringExtra("msg")); // 创建一个Bundle对象,并存入数据 Bundle bundle = new Bundle(); bundle.putString("msg", "第一个BroadcastReceiver存入的消息"); // 将bundle放入结果中 setResultExtras(bundle); // 取消Broadcast的继续传播 // abortBroadcast(); } }
public class MyReceiver2 extends BroadcastReceiver { private static final String TAG = "CM-MyReceiver2"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "msg:" + intent.getStringExtra("msg")); String first = ""; Bundle bundle = getResultExtras(true); first = bundle.getString("msg"); Log.d(TAG, "1 " + first); } }
public class SortedBroadcast extends Activity { protected static final String TAG = "CM-SortedBroadcast"; Button send; private class FinalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("CM-FinalReceiver", "get it"); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取程序中的send按钮 send = (Button) findViewById(R.id.send); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 创建Intent对象 Intent intent = new Intent(); intent.setAction("org.crazyit.action.CRAZY_BROADCAST"); intent.putExtra("msg", "原始的消息"); Log.d(TAG, "send broadcast"); // 发送普通广播 sendBroadcast(intent); // 发送有序广播 //sendOrderedBroadcast(intent, null);//不带权限的有序广播 // FinalReceiver finalReceiver = new FinalReceiver(); // sendOrderedBroadcast(intent, null, finalReceiver, null, 0, null, null);//不带权限的,但含有finalReceiver的广播 } }); } }
<receiver
android:name=".MyReceiver1" >
<intent-filter android:priority="20" >
<action android:name="org.crazyit.action.CRAZY_BROADCAST" />
</intent-filter>
</receiver>
<receiver android:name=".MyReceiver2" >
<intent-filter android:priority="0" >
<action android:name="org.crazyit.action.CRAZY_BROADCAST" />
</intent-filter>
</receiver>
--------------------------------------------------------------------
sendBroadcast(intent);
04-07 23:23:38.746 29165 29165 D CM-SortedBroadcast: send broadcast
04-07 23:23:38.756 29165 29165 D CM-MyReceiver1: msg:原始的消息
04-07 23:23:38.766 29165 29165 D CM-MyReceiver2: msg:原始的消息
04-07 23:23:38.766 29165 29165 D CM-MyReceiver2: 1 null
-----------------------------------------------------------
sendOrderedBroadcast(intent, null);//不带权限的有序广播
04-07 23:30:35.146 29812 29812 D CM-SortedBroadcast: send broadcast
04-07 23:30:35.166 29812 29812 D CM-MyReceiver1: msg:原始的消息
04-07 23:30:35.166 29812 29812 D CM-MyReceiver2: msg:原始的消息 //看来优先级低的广播也可以获得原始的消息
04-07 23:30:35.166 29812 29812 D CM-MyReceiver2: 1 第一个BroadcastReceiver存入的消息 //MyReceiver1存入的消息
-----------------------------------------------------
FinalReceiver finalReceiver = new FinalReceiver();
sendOrderedBroadcast(intent, null, finalReceiver, null, 0, null, null);//不带权限的,但含有finalReceiver的广播
04-07 23:33:33.496 30372 30372 D CM-SortedBroadcast: send broadcast
04-07 23:33:33.496 30372 30372 D CM-MyReceiver1: msg:原始的消息
04-07 23:33:33.506 30372 30372 D CM-MyReceiver2: msg:原始的消息
04-07 23:33:33.506 30372 30372 D CM-MyReceiver2: 1 第一个BroadcastReceiver存入的消息
04-07 23:33:33.506 30372 30372 D CM-FinalReceiver: get it //FinalReceiver是最后一个收到广播的 看来其优先级最低-1000
-------------------------------------------------------------------------

浙公网安备 33010602011771号