1 系统广播demo
1.1 BootReceiver 的广播接收器类:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 检查广播动作是否是设备启动完成if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {// 在设备启动完成时显示 Toast 消息Toast.makeText(context, "设备已启动完成!", Toast.LENGTH_SHORT).show();}}
}
1.2 AndroidManifest.xml 文件中声明广播接收器,并指定接收 BOOT_COMPLETED 广播
<receiverandroid:name=".BootReceiver"android:enabled="true"android:exported="false"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</receiver>
1.3 应用程序已经请求了 RECEIVE_BOOT_COMPLETED 权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
1.4 设备启动完成时,系统会发送 BOOT_COMPLETED 广播,而我们的广播接收器会接收到该广播并触发 onReceive() 方法,从而显示一个 Toast 消息
2 自定义广播demo
2.1 发送广播的活动
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;public class SendBroadcastActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_send_broadcast);Button sendButton = findViewById(R.id.sendButton);sendButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个自定义广播 IntentIntent customBroadcastIntent = new Intent("com.example.androiddemo.CUSTOM_BROADCAST");// 添加额外的数据customBroadcastIntent.putExtra("message", "这是自定义广播的消息!");// 发送广播sendBroadcast(customBroadcastIntent);}});}
}
2.2 发送广播的活动布局文件(activity_send_broadcast.xml)中,添加一个按钮
<Buttonandroid:id="@+id/sendButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="发送自定义广播" />
2.3 AndroidManifest.xml 中声明了这两个活动
<activity android:name=".SendBroadcastActivity" />
<activity android:name=".ReceiveBroadcastActivity" />
2.4 接收广播的活动
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class ReceiveBroadcastActivity extends AppCompatActivity {private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 从广播中获取消息String message = intent.getStringExtra("message");// 显示消息Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}};@Overrideprotected void onResume() {super.onResume();// 注册广播接收器registerReceiver(broadcastReceiver, new IntentFilter("com.example.androiddemo.CUSTOM_BROADCAST"));}@Overrideprotected void onPause() {super.onPause();// 取消注册广播接收器unregisterReceiver(broadcastReceiver);}
}
3 常用系统广播
BOOT_COMPLETED :系统启动完成后,ACTION_POWER_CONNECTED :连接到电源时发送ACTION_POWER_DISCONNECTED :当设备断开电源连接时发送,ACTION_BATTERY_CHANGED :当设备电池状态发生变化时发送ACTION_SCREEN_ON :当设备的屏幕被打开时发送。ACTION_SCREEN_OFF :当设备的屏幕被关闭时发送。ACTION_USER_PRESENT :当用户解锁设备时发送。ACTION_TIME_TICK :每分钟发送一次的系统广播,用于触发定时任务。ACTION_PACKAGE_ADDED :当应用程序被安装时发送。ACTION_PACKAGE_REMOVED :当应用程序被卸载时发送。ACTION_HEADSET_PLUG :当耳机被插入或拔出时发送。ACTION_MEDIA_MOUNTED :当存储设备被挂载时发送。ACTION_MEDIA_UNMOUNTED :当存储设备被卸载时发送。ACTION_MEDIA_SCANNER_STARTED :当媒体扫描器开始扫描时发送。ACTION_MEDIA_SCANNER_FINISHED :当媒体扫描器完成扫描时发送。