首页 > 其他 > 详细

1.四大组件之广播

时间:2021-09-09 09:22:19      阅读:43      评论:0      收藏:0      [点我收藏+]

广播有发射塔,有收音机

比如说升级系统,先检测一下电量,电量够才能升级

BroadcastReceiver就相当于一个收音机 (广播接收者)

 

标准广播:广播发出后,所有的收音机(BroadcastReceiver)会在同一时刻接收到这条广播消息,效率高,无法被截断。

有序广播:链式传递消息,同一时刻只有一个收音机能收到消息,这个收音机收到后下一个收音机才能接着收到。

 

系统会自动发出很多广播,比如开机广播,电池电量变化广播 想要收到这些广播就需要BroadcastReceiver(收音机)

 

想用收音机就得去相关部门申请使用无线电,BroadcastReceiver需要注册,注册之后就能接收到广播了。

在代码中动态注册或者在AndroidMainfest.xml中静态注册。

 

如何创建一个收音机(BroadcastReceiver)? 让一个类继承BroadcastReceiver并重写onReceive()方法就行了,当有广播时onReceive()方法就会执行。

 

示例一:用动态注册的方法编写一个能够监听时间变化的程序

package com.example.chargelisten;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.util.Calendar;
import java.util.TimeZone;

public class MainActivity extends AppCompatActivity {

    TimeChangeReceiver timeChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //新建一个收音机
        timeChangeReceiver = new TimeChangeReceiver();
        //新建一个意图过滤器
        //意图过滤器会过滤 动作 类别 数据
        //action category data
        IntentFilter intentFilter = new IntentFilter();
        //过滤出系统发出的值为android.intent.action.TIME_TICK的广播动作,相当于设置收音机频道
        //TICK就是每分钟收广播一次
        intentFilter.addAction(Intent.ACTION_TIME_TICK);
        //注册广播  这里的this就是 context  设置把收音机和频道注册一下
        this.registerReceiver(timeChangeReceiver,intentFilter);
        //取消注册,要不会内存泄漏
        if (timeChangeReceiver != null){
            this.unregisterReceiver(timeChangeReceiver);
        }
    }

    /*广播不作为内部类的话会报错*/
    class TimeChangeReceiver extends BroadcastReceiver {

        TextView textView;
        //获取时间
        Calendar calendar;

        @Override
        public void onReceive(Context context, Intent intent) {
            //获取实例
            calendar = Calendar.getInstance();
            //设置时区
            calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
            textView = findViewById(R.id.textView1);
            textView.setText("收到了时间变化的广播   现在分钟是: "+calendar.get(calendar.MINUTE));
        }

    }

}

 

 

 

1.四大组件之广播

原文:https://www.cnblogs.com/tuyaojiao/p/15241866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!