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成功接收到程序发送的广播信息。