第三章--四大组件BroadcastReceiver

BroadcastReceiver相当于一种全局监听器, 用于监听系统全局的广播消息。如Service和访问者的通信就可以用BroadcastReceive,一般把RoadcastReceiver当作内部类接收对方的广播。使用BroadcastReceiver一般有下面几步:

  1. 实现一个继承BroadcastReceiver的子类,重写onReceiver方法
  2. 动态或者静态指定能匹配的Intent
  3. 调用Context的sendBroadcast()发送广播

第一步:

public class TestBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent != null){
            //接收广播
            if (TextUtils.equals(intent.getAction(), SendBroadcastActivity.COM_EXAMPLE_BROADCAST)){

                String toastString = intent.getStringExtra("toast");
                Toast.makeText(context, toastString, Toast.LENGTH_SHORT).show();

            }
        }
    }
}

第二步:
静态指定:

  <receiver android:name=".TestBroadcastReceiver">
            <intent-filter>
                <action android:name="com.example.broadcast"/>
            </intent-filter>
  </receiver>

动态注册:

         //动态注册
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_EXAMPLE_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);

第三步:
在activity发送广播

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

/**
 *
 * Created by W on 2016/7/29.
 */
public class SendBroadcastActivity extends AppCompatActivity{

    public static final String COM_EXAMPLE_BROADCAST = "com.example.broadcast";
    private TestBroadcastReceiver mTestBroadcastReceiver = new TestBroadcastReceiver();
    private Button mButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activty_broadcast);

        mButton = (Button) findViewById(R.id.send_broadcast_button);


        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //发送广播
                Intent intent= new Intent();
                intent.setAction(COM_EXAMPLE_BROADCAST);
                intent.putExtra("toast", "this is my toast of broadcast");

                sendBroadcast(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        //动态注册
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_EXAMPLE_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(mTestBroadcastReceiver);
    }
}

这样基本上就能使用了BroadcastReceiver。在MainActivity中发送广播,在BroadcastReceiver接收。逻辑还是很简单。
因为BroadcastReceiver监听的是系统的广播,所以不能乱用和滥用它,如果是在应用里面可以考虑用LocalBroadcast。使用它和 BroadcastReceiver 注册与发送广播差不多,只是调用对象从 Activity 换成了 LocalBroadcastManager。而且只能动态注册。


写得不好 sad。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值