BroadcastReceiver

BrocastReceiver是一个全局监听器,用于监听系统全局的广播信息,实现系统中不同组件之间的通信。
指定BroadcastReceiver()能匹配的Intent,有两种方式:

1. 在配置文件中指定。
<receiver android:name=".MyReceiver">
    <intent-filter>
        <!-- 指定该BroadcastReceiver所响应的Intent的Action -->
        <action android:name="org.lynxw.action.CRAZY_BROADCAST" />
    </intent-filter>
</receiver>

2. 在代码中指定。
//创建IntentFilter
IntentFilter filter = new IntentFilter();
filter.addAction("org.lynxw.action.CRAZY_BROADCAST");
registerReceiver(receiver,filter);

每一次系统Broadcast事件发生后,系统就会自动创建对应的BrocastReceiver实例,并自动触发onReceive()方法。
如果BrocastReceiver的onReceive()方法在10秒内不能执行完成,会弹出ANR对话框。
如果需要完成比较耗时的操作,可以考虑通过Intent启动一个Service来完成操作

发送广播
public class MainActivity extends Activity
{
    Button send;
    MyReceiver receiver = new MyReceiver();
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 获取程序界面中的按钮
        send = (Button) findViewById(R.id.send);

        //创建IntentFilter
        IntentFilter filter = new IntentFilter();
        filter.addAction("org.lynxw.action.CRAZY_BROADCAST");
        registerReceiver(receiver,filter);

        send.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // 创建Intent对象
                Intent intent = new Intent();
                // 设置Intent的Action属性
                intent.setAction("org.lynxw.action.CRAZY_BROADCAST");
                intent.putExtra("msg", "简单的消息");
                // 发送广播
                sendBroadcast(intent);
            }
        });
    }
}

public class MyReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context,
            "接收到的Intent的Action为:" + intent.getAction()
            + "\n消息内容是:" + intent.getStringExtra("msg")
            , Toast.LENGTH_LONG).show();
    }
}


2. 有序广播
<receiver android:name=".MyReceiver">
    <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>

public class MainActivity extends Activity
{
    Button send;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.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", "简单的消息");
                // 发送有序广播
                sendOrderedBroadcast(intent, null);
            }
        });
    }
}
public class MyReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "接收到的Intent的Action为:"
                + intent.getAction() + "\n消息内容是:"
                + intent.getStringExtra("msg")
                , Toast.LENGTH_LONG).show();
        // 创建一个Bundle对象,并存入数据
        Bundle bundle = new Bundle();
        bundle.putString("first", "第一个BroadcastReceiver存入的消息");
        // 将bundle放入结果中
        setResultExtras(bundle);
        // 取消Broadcast的继续传播
        //abortBroadcast(); // ①
    }
}

public class MyReceiver2 extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle bundle = getResultExtras(true);
        // 解析前一个BroadcastReceiver所存入的key为first的消息
        String first = bundle.getString("first");
        Toast.makeText(context, "第一个Broadcast存入的消息为:"
            + first, Toast.LENGTH_LONG).show();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值