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) 。调用它解除即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值