当前位置: 代码迷 >> 综合 >> 第十二天 BroadCastReceiver 安卓广播接收者
  详细解决方案

第十二天 BroadCastReceiver 安卓广播接收者

热度:31   发布时间:2024-01-27 03:39:54.0

广播的介绍

广播接收者作用以及机制

Android四大组件之一,没有可视化界面,用于不同组件和多线程之间的通信。

其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播,每个APP都会收到,如果你想让你的应用在接收到 这个广播的时候做一些操作,比如:系统开机后,偷偷后台跑服务哈哈,这个时候你只需要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就做写偷偷摸摸的勾当~ 当然我们也可以自己发广播,比如:接到服务端推送信息,用户在别处登录,然后应该强制用户下线回到 登陆界面,并提示在别处登录当然,这些等下都会写一个简单的示例帮大家了解广播给我们带来的好处.

项目中广播接收者的使用

BroadCastReceiver广播接受者,安卓四大组件之一

广播三要素:

(1)广播发送者 : 发送广播
(2)广播接收者(调频): 用于接收广播
(3)要处理的事情 :处理广播的相关信息, Intent有图对象
广播的使用场景:
(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)
(2)2个APP之间传递数据
技能get点:
(1)自定义广播接受者
(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化

广播接收者生命周期

静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播接收者会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
静态注册:
(1)广播接收者不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播

BroadCastReceiver实现

创建

在java包下创建
在这里插入图片描述

注册

1.静态注册

在清单文件中注册广播接收者就是静态的

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

2.动态注册

package com.example.myday0304;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 Button sendId;private MyReceiver myReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sendId = (Button) findViewById(R.id.send_id);//创建一个广播接收者myReceiver = new MyReceiver();//添加一个广播过滤器IntentFilter intentFilter = new IntentFilter();//添加ActionintentFilter.addAction("com.day0304");//注册registerReceiver(myReceiver, intentFilter);sendId.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//发送无序广播
// Intent intent = new Intent();
// intent.setAction("com.day0304");
// sendBroadcast(intent);//有序广播Intent intent = new Intent();intent.setAction("com.day0304");sendBroadcast(intent, null);}});}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(myReceiver);}
}
无序广播和有序广播

无序调用sendBroadcast方法
有序调用sendOrderedBroadcast方法

无序广播

Intent intent = new Intent();
intent.setAction("com.day0304");
sendBroadcast(intent);

有序广播

//有序广播
Intent intent = new Intent();
intent.setAction("com.day0304");
//第一个参数intent,第二个参数权限名
sendBroadcast(intent, null);

清单文件 范围-1000-1000之间

//设置优先级
<receiverandroid:name=".MyReceiver"android:enabled="true"android:exported="true"><intent-filter android:priority="1000"><action android:name="com.day0304"></action></intent-filter></receiver>