BroadCastReceiver 安卓广播接收者

广播的介绍

广播接收者作用以及机制

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.静态注册

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

 <receiver
            android: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;

    @Override
    protected 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();
        //添加Action
        intentFilter.addAction("com.day0304");
        //注册
        registerReceiver(myReceiver, intentFilter);
        sendId.setOnClickListener(new View.OnClickListener() {
            @Override
            public 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);
            }
        });
    }

    @Override
    protected 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之间

//设置优先级
<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="com.day0304"></action>
            </intent-filter>
        </receiver>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值