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

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情


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

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

image8.GIF

一、我讲

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

1.1 广播 BroadcastReceiver

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

image.png

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

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

image.png

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);//注册广播
复制代码

二、你做

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

image8.GIF

这是本系列第一个只有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判断,如果是壁纸更换,我们弹出提示。

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

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

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

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

三、关于

现在,行业内多是Android转Java,很少有Java转Android的。

但是,这并不妨碍Java同学了解Android开发,从学习的角度去拓宽自己的知识面。

所以,我会以最精简的语言来编写一个系列教程《Java转Android》(第一季30篇,日更)。

其实,不管是Java还是python,只要有编程基础的同学,一天看800字,30天可入门安卓。

猜你喜欢

转载自juejin.im/post/7128491222913515534