BroadcastReceiver是一种用于接收来自系统和应用中的广播的组件。在Android系统中,广播体现在各个方面,例如开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度等等。Android中的广播机制设计得非常出色,很多原本需要开发者亲自操作的事情现在只需等待广播告知即可,大大减少了开发的工作量和开发周期。作为应用开发者,我们需要熟练掌握Android系统提供的这一开发利器——BroadcastReceiver。
在我们详细分析创建BroadcastReceiver的两种注册方式前,我们先罗列本次分析的大纲:
1. 对静态和动态两种注册方式进行概念阐述以及演示实现步骤
2. 简述两种BroadcastReceiver的类型(为后续注册方式的对比做准备)
3. 在默认广播类型下设置优先级和无优先级情况下两种注册方式的比较
4. 在有序广播类型下两种注册方式的比较
5. 通过接受打电话的广播,在程序(Activity)运行时和终止运行时,对两种注册方式的比较
6. 总结两种方式的特点
一、静态和动态注册方式
构建Intent,使用sendBroadcast方法发出广播定义一个继承自BroadcastReceiver并覆盖onReceive()方法的广播接收器。我们可以在代码中注册(动态注册),也可以在AndroidManifest.xml配置文件中注册(静态注册)。
案例解析:
1. 主界面设计
后台代码设计如下:
1. 首先,我们需要创建一个Java类,例如`SendMessageActivity`,并继承自`AppCompatActivity`。
2. 在`SendMessageActivity`中,我们需要定义一个按钮(Button)和一个文本框(EditText),用于用户输入消息和发送消息。
3. 为按钮设置点击事件监听器,当用户点击按钮时,获取文本框中的内容,并进行相应的处理(例如发送消息)。
以下是`SendMessageActivity`的代码示例:
```java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SendMessageActivity extends AppCompatActivity {
private Button btnSend;
private EditText etMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send_message);
btnSend = findViewById(R.id.btnSend);
etMessage = findViewById(R.id.etMessage);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = etMessage.getText().toString();
if (!message.isEmpty()) {
// 在这里处理发送消息的逻辑,例如调用API发送消息等
Toast.makeText(SendMessageActivity.this, "消息已发送", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SendMessageActivity.this, "请输入消息内容", Toast.LENGTH_SHORT).show();
}
}
});
}
}
```
注意:在实际项目中,还需要根据具体需求实现发送消息的逻辑,例如调用第三方API发送消息等。
```java
package com.aaa.btdemo02;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
// 定义对象
Button btnSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //取值
btnSend = (Button) findViewById(R.id.btnSend);
// 为按钮设置监听事件,发送信息,大喇叭等操作
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
// 设置 intent 的动作,后面字符串是自定义的
intent.setAction("android.intent.action.receiverdata");
String msg = "羊村各位村民开会了";
intent.putExtra("msg", msg);
MainActivity.this.sendBroadcast(intent);
}
});
}
}
```
. 创建自定义的广播接收器类在 Android 项目中,可以通过创建一个继承自 `BroadcastReceiver` 的类来实现自定义的广播接收功能。以下是创建自定义广播接收器的步骤:
- 打开 Android Studio,选择你的项目目录。
- 在项目的 `src/main/java` 目录下,找到或创建一个与你的需求相符的包(package),例如:`com.aaa.btdemo02`。
- 在包中创建一个新的 Java 类文件,并命名为 `MyReceiver`。确保类名首字母大写,符合 Java 命名规范。
- 在 `MyReceiver` 类中,导入所需的包,包括 `android.content.BroadcastReceiver`,`android.content.Context`,`android.content.Intent`,`android.text.TextUtils` 和 `android.util.Log`。
- 让 `MyReceiver` 类继承自 `BroadcastReceiver`。
- 实现 `onReceive()` 方法,该方法会在广播接收到时被调用。在该方法中,你可以编写接收广播的逻辑。
- 最后,别忘了在 AndroidManifest.xml 文件中注册你的广播接收器。
4. 注册广播
在代码中注册广播接收器,可以按照以下步骤进行操作:
- 在你的 Activity、Service 或者 BroadcastReceiver 类中,获取对应的 Context 对象。
- 在获取到 Context 后,使用 `registerReceiver()` 方法将自定义的广播接收器注册到系统中。
- 在 `registerReceiver()` 方法中,传入两个参数:一个是你刚刚创建的广播接收器对象,另一个是 IntentFilter。
- 通过设置 IntentFilter 的 actions 属性来指定需要监听的广播类型。
- 最后,返回一个布尔值表示是否成功注册了广播接收器。
请注意,以上步骤仅提供了创建和注册自定义广播接收器的基本流程。根据你的具体需求,可能还需要对代码进行更多的修改和完善。
以下是重构后的XML文件内容:
```xml
package="com.aaa.btdemo02"> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Btdemo02"> android:name=".MainActivity">
```
. 运行效果
在这里插入图片描述
您可能感兴趣的文章: