Android receiver 动态注册广播

系统广播:刚开机提醒 网络断开提示 蓝牙连接情况 地池电量低

静态注册广播:在清单文件里注册(不好用,接收方没有打印出LOG → 清单文件中的代码不好用)
*动态注册广播:在java里注册

一 步骤

step1 工具类,定义flag 
step2 创建一个接收者
    CustomReceiver 继承 BroadcastReceiver,重写onReceive方法
step3 xml 定义点击事件
step4 MainActivity里
    1 动态注册
        //java代码来注册动态接收者
        //new一个自定义的接收者
        CustomReceiver customReceiver = new CustomReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(ActionUtils.DONG_ACTION_FLAG);
        registerReceiver(customReceiver,filter);
    2 点击事件:        
        Intent intent = new Intent();
        // 参数是静态的flag (注册清单文件里的 action的name)
        intent.setAction(ActionUtils.JING_ACTION_FLAG);
        //发送广播
        sendBroadcast(intent);

二 代码


 step1 工具类,定义flag

//动态接收者flag
    String DONG_ACTION_FLAG ="com.cs.dong";

  step2 创建一个接收者

CustomReceiver.java
package com.example.myactivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

//接收者
public class CustomReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.e("cs","动态接收到了");
    }
}

step3 xml 定义点击事件

android:onClick="sendDongAction"

step4 MainActivity里

package com.example.myactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;

public class MainActivity4 extends AppCompatActivity {

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

        //java代码来注册动态接收者
        //new一个自定义的接收者
        CustomReceiver customReceiver = new CustomReceiver();
        IntentFilter filter = new IntentFilter();
        //参数是动态的flag
        filter.addAction(ActionUtils.DONG_ACTION_FLAG);
        registerReceiver(customReceiver,filter);

    }

    //点击事件,动态发送广播 给接收者
    public void sendDongAction(View view) {
        Intent intent = new Intent();
        // 参数是动态的flag
        intent.setAction(ActionUtils.DONG_ACTION_FLAG);
        //发送广播
        sendBroadcast(intent);
    }
}

效果

 注意log打不出来的时候改下这里

 静态注册步骤:(虽然不好用也记录一下)

1 工具类,定义flag 
1 创建一个接收者
CustomReceiver 继承 BroadcastReceiver,重写onReceive方法
2 在清单文件中注册静态接收者(action的name 是 静态接收者的flag)
       <!-- 静态注册广播接收者 -->
        <receiver android:name=".CustomReceiver">
            <intent-filter>
                <action android:name="com.cs.jing" />
            </intent-filter>
        </receiver>
3 xml
4 MainActivity里点击事件:
        
        Intent intent = new Intent();
        // 参数是静态的flag (注册清单文件里的 action的name)
        intent.setAction(ActionUtils.JING_ACTION_FLAG);
        //发送广播
        sendBroadcast(intent);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值