携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
看完这800字,你将获得如下技能:
你的壁纸被女票更换了,你的程序会记录下来,并警示她。
一、我讲
今天,我主要简单一讲Android
中广播BroadcastReceiver
这个知识点。
1.1 广播 BroadcastReceiver
广播站时刻在发送信号,有设备接收到这个频率,就可以收听这个节目。
对于广播,你听或者不听,它都在那里。你愿意听,就听,不听,也不耽误它对外发送。
Android系统中也有广播BroadcastReceiver
这个概念,而且和你理解的广播极其一致。
Android内置了多个系统广播,只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会对外发出相应的广播。你愿意接收,就接收,不接收它也往外发。
![](/qrcode.jpg)
我愿意做一个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)
。调用它解除即可。
三、关于
现在,行业内多是Android转Java,很少有Java转Android的。
但是,这并不妨碍Java同学了解Android开发,从学习的角度去拓宽自己的知识面。
所以,我会以最精简的语言来编写一个系列教程《Java转Android》(第一季30篇,日更)。
其实,不管是Java还是python,只要有编程基础的同学,一天看800字,30天可入门安卓。