OrderedBroadcast

 有序广播可以设置最后的接收者finalReceiver

public class MyReceiver1 extends BroadcastReceiver {
    
    private static final String TAG = "CM-MyReceiver1";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, intent.getStringExtra("msg"));
        // 创建一个Bundle对象,并存入数据
        Bundle bundle = new Bundle();
        bundle.putString("first", "第一个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) {
        Bundle bundle = getResultExtras(true);
        // 解析前一个BroadcastReceiver所存入的key为first的消息
        String first = bundle.getString("first");
        Log.d(TAG, first);
    }
}

 

public class SortedBroadcast extends Activity {
    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", "简单的消息");
                // 发送有序广播
                FinalReceiver finalReceiver = new FinalReceiver();
                sendOrderedBroadcast(intent, null, finalReceiver, null, 0, null, null);
            }
        });
    }
}

 

        <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>

 

04-07 21:48:42.366  8014  8014 D CM-MyReceiver1: 简单的消息
04-07 21:48:42.376  8014  8014 D CM-MyReceiver2: 第一个BroadcastReceiver存入的消息
04-07 21:48:42.376  8014  8014 D CM-FinalReceiver: get it

posted @ 2015-03-17 00:02  牧 天  阅读(245)  评论(0)    收藏  举报