Android广播机制的学习——自定义广播实战演练——发生求救广播 动态注册BroadcastReceiver

Android广播机制的学习——自定义广播实战演练——发生求救广播 动态注册BroadcastReceiver

Android系统中自定义了很多类型的广播,当需要接收这些广播时,只需在程序中创建对应的广播接收者接收即可,当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。

以下案例将通过一个发送求救广播来演示自定义广播的发送和接收。

1、创建程序

创建一个名为ForHelp的应用程序,指定包名为cn.itcast.forhelp。

2、放置界面控件

在activity_main.xml布局文件中,放置1个Button控件用于显示”发送求救广播“的按钮。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送求救广播"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

3、创建广播接收者

选中程序中的cn.itcast.forhelp包,在该包中创建一个MyBroadcastReceiver并继承BroadcastReceiver,用于接收发送的广播信息。代码如下:

package cn.itcast.forhelp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiver","自定义的广播接收者,接收到了求救广播事件");
        Log.i("MyBroadcastReceiver",intent.getAction());
    }
}

代码重写了onReceive()方法,在该方法中通过Log打印接收到的广播信息。

4、编写界面交互代码

在MainActivity中创建一个init()方法,在该方法中获取发送求救广播的控件并实现该控件的点击事件。代码如下:

package cn.itcast.forhelp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        //通过registerReceiver()方法动态注册MyBroadcastReceiver广播接收者
        receiver = new MyBroadcastReceiver();//实例化广播接收者
        String action = "Help_Stitch";
        IntentFilter intentFilter = new IntentFilter(action);
        registerReceiver(receiver, intentFilter);
        //通过findViewById()方法获取控件bt1,并实现该控件的点击事件
        Button bt1 = (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction("Help_Stitch");
                sendBroadcast(intent);
            }
        });

    }
}

5、运行程序

运行上述程序,点击“发送求救广播”按钮,程序会发送一天广播信息,此时在Log Cat窗口可以看到打印的接收到广播的信息,运行截图如下:
在这里插入图片描述
由图可知,广播接收者MyBroadcastReceive成功接收到程序发送的广播信息。

猜你喜欢

转载自blog.csdn.net/weixin_45080371/article/details/106212329