第三章--四大组件BroadcastReceiver

作者: Dddddw | 来源:发表于2016-10-02 20:12 被阅读0次

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

相关文章

网友评论

    本文标题:第三章--四大组件BroadcastReceiver

    本文链接:https://www.haomeiwen.com/subject/ezmdyttx.html