• Java转Android:第6天 BroadcastReceiver知道你换了壁纸


    看完这800字,你将获得如下技能:

    你的壁纸被女票更换了,你的程序会记录下来,并警示她。

    一、我讲

    今天,我主要简单一讲 Android 中广播 BroadcastReceiver 这个知识点。

    1.1 广播 BroadcastReceiver

    广播站时刻在发送信号,有设备接收到这个频率,就可以收听这个节目。

    对于广播,你听或者不听,它都在那里。你愿意听,就听,不听,也不耽误它对外发送。

    Android系统中也有广播 BroadcastReceiver 这个概念,而且和你理解的广播极其一致。

    Android内置了多个系统广播,只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会对外发出相应的广播。你愿意接收,就接收,不接收它也往外发。

    我愿意做一个Android设备的收音机,但是我怎么才能收到它的信号呢?

    要收听系统的广播,需要两步:第一,构建广播类(收到之后做什么);第二,注册广播(要收听什么类型的广播)。

    1.2 定义自己的广播接收器

    我们可以写一个类来收听广播,只要继承系统的BroadcastReceiver这个类:

    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){
            //你解锁屏幕了
            }
        }
    }
    复制代码

    1.3 向系统注册广播

    注册广播需要这样:

    IntentFilter intentFilter = new IntentFilter();//构建过滤器
    //给过滤器添加想要收听的动作,相当于收音机调频
    intentFilter.addAction(Intent.ACTION_USER_PRESENT);
    registerReceiver(new MyReceiver(),intentFilter);//注册广播
    复制代码

    二、你做

    再来回顾一下,我们要做的这个小应用,当系统壁纸被更换了之后,会弹出提示语: 你更换了壁纸,被我看到了 。这个提示是我们的应用弹出的。

    这是本系列第一个只有 Java 代码,没有 xml 布局的例子了。

    一个 MainActivity 全部实现,代码如下:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            // 构建过滤器
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(Intent.ACTION_WALLPAPER_CHANGED);
            // 注册广播
            registerReceiver(new MyReceiver(),intentFilter);
        }
    
        // 我的广播
        public class MyReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (Intent.ACTION_WALLPAPER_CHANGED.equals(intent.getAction())){
                    Toast.makeText(context, "你更换了壁纸,被我看到了", Toast.LENGTH_LONG).show();
                }
            }
        }
    }
    复制代码

    首先建立一个自己的广播接收器 MyReceiver ,注意要继承 BroadcastReceiver 。

    然后,在类里面有一个 onReceive 方法,这里面会传来 Android 系统发来的你关注的所有广播。

    出于严谨(如果只注册了更换壁纸,那么这里面只能收到唯一一个),在 onReceive 里我们还是加一个 if 判断,如果是壁纸更换,我们弹出提示。

    最后,在 Activity 的 onCreate 方法里,定义一个过滤器 IntentFilter ,然后把我们的 MyReceiver 和过滤器绑定,告诉系统如果有涉及到 intentFilter 里面描述的消息,请通知到 MyReceiver 。

    好了,运行一下,更换个壁纸试试,效果很哇塞!

    如果我们不想收听广播了,怎么办呢?就像很多App可以选择不推送给我消息。

    Android提供了一个解除广播的方法叫 unregisterReceiver(myReceiver) 。调用它解除即可。

  • 相关阅读:
    文件IO-缓冲区
    使用Java分割PDF文件
    Numpy解决找出二维随机矩阵中每行数据中最接近某个数字的数字
    RabbitMQ实现数据库与ElasticSearch的数据同步和分享文件过期处理
    解压玩具出口欧盟CE认证具体要求
    ros协议的最佳解决方案
    【老生谈算法】matlab实现模糊K-均值算法——均值算法
    IBM MQ 通道
    2023年汉字小达人市级比赛题型示例和全真在线练习题
    【C++那些事儿】内联函数,auto,以及C++中的空指针nullptr
  • 原文地址:https://blog.csdn.net/JHIII/article/details/126194326