Android学习--BroadcastReceiver

什么是BroadcastReceiver广播

  • 分为广播发送,广播接收(发送方,接收方),(没有接收方,发送方也会发送数据)
  • android四大组件之一
  • 跨多个页面
  • 跨多个进程/多个app

分类

  • 无序广播:同时接收,没有先后顺序
  • 有序广播:按照顺序,优先级,逐一传递
  • 粘滞广播:没有接收者会一直等待,直到接收者接收

注册方式

  • 静态注册:这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行
  • 动态注册:非常驻型,需要时调用才能运行

如何使用广播

静态注册无序广播:

  1. 新建一个新的工程发送广播,
  2. 新建另一个新的工程作为接收方,新建一个实体类继承BroadcastReceiver,在接收方AndroidManifest注册BroadcastReceiver
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="zhifubao"/>//发送广播传值的名字
</intent-filter>
</receiver>

发送方
sendActivity:

public class SendActivity extends AppCompatActivity {
    private Button messageBtn;

    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send);

        messageBtn=findViewById(R.id.message_btn);
        messageBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("zhifubao");
                sendBroadcast(intent);
            }
        });

接收方
MainActivity:不做修改
新建一个MyReceivediver实体类:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "叫我干啥", Toast.LENGTH_SHORT).show();
        }

AndroidManifest添加:

<receiver android:name=".MyReceiver">
                <action android:name="zhifubao"/>
            </intent-filter>
        </receiver>

动态注册无序广播

发送方不做修改

接收方

将之前AndroidManifest添加的删除,不做修改
MainActivity在之前的基础上修改接收方

public class MainActivity extends AppCompatActivity {
    private MyReceiver receiver;

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

        //动态注册
        receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("zhifubao");
        //动态注册广播接收器
        registerReceiver(receiver, filter)

静态注册有序广播

在接收方新建一个新的实体类MyReceiver

发送方:
SendActivity:

public class SendActivity extends AppCompatActivity {
    private Button messageBtn;
    private Button messageBtn2;

    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send);

        messageBtn=findViewById(R.id.message_btn);
        messageBtn2=findViewById(R.id.message2_btn);
        messageBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("zhifubao");
                sendBroadcast(intent);
            }
        });
        //静态有序发送
        messageBtn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("zhifubao");
                //重点修改的地方
                sendOrderedBroadcast(intent,null);//自定义权限
            }
        });
    }

接收方

AndroidManifest添加:

 <receiver android:name=".MyReceiver">
            <intent-filter android:priority="1000"> //设置先后顺序
                <action android:name="zhifubao"/>
            </intent-filter>
        </receiver>

        <receiver android:name=".MyReceiver2">
            <intent-filter android:priority="-1000">//设置先后顺序
                <action android:name="zhifubao"/>
            </intent-filter>
        </receiver>

MyReceiver:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "叫我干啥", Toast.LENGTH_SHORT).show();
        }

MyReceiver2:

public class MyReceiver2 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "消息2接收到了", Toast.LENGTH_SHORT).show();
        }

动态注册有序广播

发送方不做修改

接收方:

AndroidManifest之前添加的全都屏蔽

MainActivity:

public class MainActivity extends AppCompatActivity {
    private MyReceiver receiver;
    private MyReceiver2 receiver2;

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

        //动态注册
        receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("zhifubao");
        //重点添加修改,将静态注册有序广播转换为动态有序广播的操作
        filter.setPriority(1000);//设置先后顺序
        //动态注册广播接收器
        registerReceiver(receiver, filter);

        receiver2=new MyReceiver2();
        IntentFilter filter1=new IntentFilter();
        filter1.addAction("zhifubao");
        //重点添加修改,将静态注册有序广播转换为动态有序广播的操作
        filter.setPriority(-1000);//设置先后顺序
        //动态注册广播接收器
        registerReceiver(receiver2,filter1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
}

MyReceiver:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "叫我干啥", Toast.LENGTH_SHORT).show();
        Log.e("MyReceiver","1111111111111");//以显示接收广播先后顺序
        abortBroadcast();//终止广播进行到MyReceiver2
    }
}

MyReceiver2:

public class MyReceiver2 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "消息2接收到了", Toast.LENGTH_SHORT).show();
        Log.e("MyReceiver2","22222222222");//以显示接收广播先后顺序
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值