关于广播的使用

1.什么是广播
广播是Android的四大组件之一,全程是BoradcastReceiver,广播的分类分为发送和接受方,就算没有接收方,发送方也会发送数据。
广播可以实现跨多个页面数据传输,也可以实现跨进程间的数据通信。
对于什么是广播我们生面有许多的例子就比如,手机中的来电,短信电量,开机等各种操作。看看自己以为广播离自己很远但是只要你仔细观察一下就会与发现身边到处都是。
关于广播的分类我们可以分为三种:
无序广播:不管有多少接受者,一旦发出无序广播,所有监听此广播的的接受者都能接收到。
有序广播:按照接受者的优先级,逐一传递,优先级最高的接受者先接受,如果不终止此广播,再往下传递。
粘滞广播:当广播发出后,如果系统没有接受者,会一直等待,直到有接受者接受消息为止。
2.静态注册无序广播示例
我们要新建继承类BroadcastRecevier
实现onReceive抽象方法
在AndroidManifest中注册BroadcastRecevier

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

之后再Context环境中通过sendReceive发送广播
代码如下

public class MyRecvice extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "你好", Toast.LENGTH_SHORT).show();
        Log.e("Recevice","---------------");
       // abortBroadcast();
    }
}

这是接受页面的代码然后下面就是发送广播的代码

public class MainActivity extends AppCompatActivity {

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

        button=findViewById(R.id.butn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "asdf", Toast.LENGTH_SHORT).show();
                //发送广播
                Intent intent = new Intent("zhifubao");

                sendBroadcast(intent,null);

            }
        });
    }
}

3.动态注册无序广播示例
动态就是在AndroidMainifest中注册的弄到代码中实现
代码如下

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


        myRecvice = new MyRecvice();
        IntentFilter intentFilter = new IntentFilter();
       intentFilter.addAction("zhifubao");

        registerReceiver(myRecvice,intentFilter);
    }
       @Override
    protected void onDestroy() {
        super.onDestroy();
      unregisterReceiver(myRecvice);
    }


}

4.静态注册有序广播示例
在AndroidMainifes中添加priority属性至于之后的优先级就是你去的数字决定的在-1000到1000之间对于其他的代码其实是一样的没有什么的区别
priority属性:在注册时,设置的广播的优先级级别,此属性是一个int型
sendOrderedBroadcast方法:发送一个有序广播,优先级最高的广播优先接受。
setResultExtras方法:此方法在onReceive内部使用,代表继续往下一级传递有序广播
abortBroadcast方法:此方法在onReceive内部使用,如果不想继续传递,使用此方法结束广播
5.动态注册有序广播示例
在前面的无序动态广播就是加一句intentFilter.setPriority(1000);就可以实现,
sendOrderedBroadcast发送广播。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值