发送并接收自定义广播(标准广播)

首先我们先静态注册一个广播接收器:
右击包名,在打开的快捷菜单中选择New–Other–Broadcast Receiver
然后输入名字,我这里输入的是MyReceiver,并勾选enable和exported
enable表示是否启用
exported表示是否接收本程序以外的广播

接着就会得到一个类并继承BroadcastReceiver类,代码如下:

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
           Toast.makeText(context, "接收自定义广播成功", Toast.LENGTH_SHORT).show();
    }
}

因为Android的四大组件都会在AndroidManifest.xml中注册
所以在AndroidManifest.xml中也会有如下代码:

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.my.broadcast"/>
            intent-filter>
        receiver>

因为之前的快捷操作,AndroidStudio自动在AndroidManifest.xml中注册好了,就像你新建一个Activity一样。

此处的intent-filter标签的作用是过滤广播,也就是指定你创建的这个广播接收器接收的广播,你指定他接收什么广播,就要在这个标签中添加对应的action。

可以看到,我此处指定他接收一条名为com.my.broadcast的广播,这是我自定义的广播,也就是说,这个广播接收器目前只能接收到com.my.broadcast的广播,以上广播接收器的静态注册就完成了。

现在我们在MainActivity中发送一条为com.my.broadcast的广播
代码如下:

public class MainActivity extends AppCompatActivity {
    private Button btn_send;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_send = findViewById(R.id.main_btn_send);

        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 调用构造方法为Intent设置了Action
                Intent intent = new Intent("com.my.broadcast");
                //发送广播
                sendBroadcast(intent);
            }
        });

    }
}

此处我在MainActivity的布局中就写了一个Button,并为这个Button设置监听事件,点击这个Button就发送一条为com.my.broadcast的广播,此时已经注册好的广播接收器,收到了这条广播后,就会执行它的onReceive()方法,我这里就弹一个Toast,所以你会看到一个Toast的提示。

证明广播的跨应用性
打开另外一个新的项目
静态注册一个广播接收器,并在onReceive()方法中弹一个Toast
设置action为com.my.broadcast
运行程序,点击按钮发送广播,此时你会发现弹出两个Toast
这就证明了本程序的广播也可以被别的程序接收到

你可能感兴趣的:(Android开发)