Android进阶——BroadcastReceiver(广播)

BroadcastReceiver(广播)的使用

(一)什么是广播?

概念:

  • Android**四大组件**,全称BroadcastReceiver;
  • 分为发送方和接收方,不论有无接收方,发送方都会发送消息
  • 可以实现页面进程(APP)之间的通信。

广播的分类:

广播分类解释
无序广播一旦发出无序广播,所有监听此广播的监听者都能接收。
有序广播按照接收者的优先级逐一接收,优先级最高的接收者先接收,如果不终止则继续往下传递。
粘滞广播当广播发出后,系统一直等到有接收者接收为止。

有序广播的属性及方法:

属性名/方法名用途
priority属性在注册时,设置广播的优先级别,取值范围:-1000至1000
sendOrderedBroadcast方法发送一个有序广播,优先级最高的广播最先接收到。
setResultExtras方法在onReceive内部用,代表继续往下一级传递有序广播。
abortBroadcast方法在onReceive内部用,如果不想继续传递,用此方法结束广播。

广播注册的两种类型:静态注册&动态注册

静态注册:在AndroidManifest中注册的广播属于常驻型广播,广播一直处于监听状态,一旦有发送者发了对应的广播,接收者就会被激活。
动态注册:在Java代码中注册的广播属于非常驻型广播,当前应用程序一结束,广播也就停止监听了。

(二)静态注册无序广播:

Step1:新建项目工程A,写入一个Button并添加监听,并通过SendBroadcast发送广播;
   button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                intent.setAction("zhifubao");//选择频道号
                sendBroadcast(intent);//发送广播

            }
        });
Step2:新建项目工程B,在里面新建类继承BroadcastReceiver;
public class MySend extends BroadcastReceiver {
Step3:新建类中实现onReceive抽象方法:
@Override
    public void onReceive(Context context, Intent intent) {
       Log.e("支付宝在此","11111111111");
        Toast.makeText(context, "支付宝在此", Toast.LENGTH_SHORT).show();
}
Step4:在AndroidManifest中注册BroadcastReceiver;
 <receiver android:name=".MySend">//自定义类的路径
            <intent-filter>
               <action android:name="zhifubao" />频道号
            </intent-filter>
        </receiver>

(三)动态注册无序广播:

动态注册无序广播的步骤的前三个步骤同静态注册无序广播的一样,这里我们就直接跳过,不同的是第四步。

Step4:这里我们不在AndroidManifest中注册BroadcastReceiver,而是在Java代码中注册的广播。
private MySend mySend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

               mySend=new MySend();
                IntentFilter filter=new IntentFilter();
                filter.addAction("zhifubao");
                filter.setPriority(1000);
                //动态注册广播接收器
                registerReceiver(mySend,filter);

    }

(四)静态注册有序广播

Step1:新建项目A,Context环境中需要通过sendOrderedBroadcast发送广播;
button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                intent.setAction("zhifubao");
               sendOrderedBroadcast(intent,null);
            }
        });
Step2:分别新建项目B和项目C,新建类继承BroadcastReceiver;
@Override
    public void onReceive(Context context, Intent intent) {
       Log.e("支付宝在此","11111111111");
        Toast.makeText(context, "支付宝在此", Toast.LENGTH_SHORT).show();
@Override
    public void onReceive(Context context, Intent intent) {
       Log.e("美团在此","22222222222222");
        Toast.makeText(context, "美团在此", Toast.LENGTH_SHORT).show();
    }
Step3:在各自的AndroidManifest中注册BroadcastReceiver,这里需要注意的是需要写入priority属性设置优先级;

项目B:

<receiver android:name=".MySend">
            <intent-filter android:priority="1000">
               <action android:name="zhifubao" />
            </intent-filter>
        </receiver>

项目C:

<receiver android:name=".Service">
            <intent-filter android:priority="-1000">
                <action android:name="zhifubao"/>
            </intent-filter>
        </receiver>

(五)动态注册有序广播

Step1:新建项目A,Context环境中需要通过sendOrderedBroadcast发送广播;
Step2:在Java代码中发送广播;
Step3:分别新建项目B和项目C,新建类继承BroadcastReceiver;
Step4:在各自的AndroidManifest中注册BroadcastReceiver。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值