安卓学习之四大组件之广播

广播注册的三者方式

1.动态注册广播

动态接收的广播多数情况下是内部类,这样子可以操作外部类。

 ①. //注册广播

//第一步,创建意图过滤器(对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应)

IntentFilter intentFilter = new IntentFilter();

//第二步,添加要监听的广播action(设置频道

intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);

//第三步,实例化广播接收者,并且设置成成员变量,以便于取消注册,释放资源

BatteryLevelReceiver  batteryLevelReceiver = new BatteryLevelReceiver();

//第四步,注册广播接收者

this.registerReceiver(batteryLevelReceiver, intentFilter);

②. 创建一个广播接收者,继承自BroadcastReceiver(),内部类.

     getAction()得到频道内监听的内容。通过intent意图接受信息。

③.广播取消注册(不用时)batteryLevelReceiver已经为外部成员变量

protected void onDestroy() {
        super.onDestroy();
//取消注册,否则会导致内存泄露
        if(batteryLevelReceiver != null){
            this.unregisterReceiver(batteryLevelReceiver);
            batteryLevelReceiver = null;
        }
    }

 

2.静态注册广播

①注册方式:在AndroidManifest里进行注册

首先在Application节点里头,添加一个receiver节点。name则是广播接收者

②.设置广播接收

创建一个广播接收者,继承自BroadcastReceiver(),内部类.

getAction()得到频道内监听的内容。通过intent意图接受信息。

③.不需要进行取消注册,会一直进行广播接受。

 

静态配置监听应用的卸载与安装:

AndroidManifest.xml的配置

 

静态注册和动态注册的区别:

静态注册可以一直监听着,即使应用没有起来,也可以监听着,但是耗资源,长期监听着。

静态注册的广播优先级高于动态注册的广播。

动态注册的优点就是省资源,需要的时候才监听,不需要的时候需要取消注册。

 

3.自定义广播

1)自定义动态注册广播

1.注册广播

//注册广播
IntentFilter filter = new IntentFilter();
//增加Action(与隐式广播不同)
filter.addAction("com.example.qqlogindemo.POST_LETTER");
//实例化监听对象
broadCast = new BroadCast();
//注册
this.registerReceiver(broadCast,filter);

2.设置广播内容发送:(发送对象也是放在intent发送,获取得先得到intent.getParcelableExtra())

private void IntentPost() {
    String postText = post.getText().toString().trim();
    Intent intent = new Intent();
    intent.setAction("com.example.qqlogindemo.POST_LETTER");
    intent.putExtra("postMsg",postText);
    //广播发射
    sendBroadcast(intent);
    Log.d(TAG,"发射");
}

3.广播销毁:

@Override
protected void onDestroy() {
    super.onDestroy();
    if(broadCast != null){
        this.unregisterReceiver(broadcast);
        broadCast = null;
    }
}

2)在另一个监听器中:BroadCast.java(继承BroadcastReceiver)

1.监听广播:(不需要进行注册)

public class BroadCast extends BroadcastReceiver{
    private static final String TAG = "BroadCast";
        @Override
        public void onReceive(Context context, Intent intent) {
//获取监听内容
            String action = intent.getAction();
            Log.d(TAG,"action->>"+action);
            String postMsg = intent.getStringExtra("postMsg");
            Log.d(TAG,"信息内容为:"+postMsg);
        }
}

 

 

 

完整流程:

PostLetter.java 
public class PostLetter extends Activity implements View.OnClickListener {

    private static final String TAG = "PostReceiver";
    private Button postBtn;
    private EditText post;
    private BroadCast broadCast;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.receiver);
        InitVeiw();
        InitLinstener();
        //注册广播
        IntentFilter filter = new IntentFilter();
        //增加Action(与隐式广播不同)
        filter.addAction("com.example.qqlogindemo.POST_LETTER");
        //实例化监听对象
        broadCast = new BroadCast();
        //注册
        this.registerReceiver(broadCast,filter);
    }

    private void InitVeiw() {
        postBtn = this.findViewById(R.id.post_btn);
        post = this.findViewById(R.id.post_text);
    }

    private void InitLinstener() {
        postBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //将数据广播出去
        IntentPost();
    }

    private void IntentPost() {
        String postText = post.getText().toString().trim();
        Intent intent = new Intent();
        intent.setAction("com.example.qqlogindemo.POST_LETTER");
        intent.putExtra("postMsg",postText);
        //广播发射
        sendBroadcast(intent);
        Log.d(TAG,"发射");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(broadCast != null){
            this.unregisterReceiver(broadCast);
            broadCast = null;
        }
    }
}
BroadCast,java(监听器)
public class BroadCast extends BroadcastReceiver{
    private static final String TAG = "BroadCast";

        @Override
        public void onReceive(Context context, Intent intent) {
            //获取监听内容
            String action = intent.getAction();
            Log.d(TAG,"action->>"+action);
            String postMsg = intent.getStringExtra("postMsg");
            Log.d(TAG,"信息内容为:"+postMsg);
        }
}

运行截图:

 

==================================================================

                               以上内容根据b站up主程序猿拉大锯学习整理

                                                        供自己学习使用

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值