BroadCastReciver

本文详细介绍了Android中的广播机制,包括无序广播、有序广播及滞留广播的概念,并讲解了如何通过代码动态注册与在manifest文件中静态注册广播接收器。此外,还探讨了广播的优先级设置以及自定义权限的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


闲暇时间研究了下 BroadcastReciver 这里给大家做下分享。

广播有三种:1、无序广播

     2、有序广播

     3、滞留广播(不过这一方法现在已经过时)

我们常用的是无序广播和有序广播,其中无序广播设置广播拦截 abortBroadcast是不能用的。滞留广播,发送的是一个静态的广播,即使注册reciver在发送广播以后,同样可以接收到广播。

BroadCastReciver 的注册分为两种:1、代码中动态注册

 2、manifest中静态注册。

代码中动态注册广播,当调用了unregisterReceiver 后,广播会被销毁

静态注册的广播,广播会随着程序的结束而结束


代码中动态注册的时候,在Activity中注册以后,还要注销reciver。我这里是在onCreate中注册,onDestory中注销,代码如下:

public class BoradcastActivity extends Activity {

    private BC1 reciver;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast);
        reciver =new BC1();
        IntentFilter filter = new IntentFilter("BC1");//设置广播顾虑器
        registerReceiver(reciver,filter);
    }

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

    public void doClick(View v) {
        Log.d("ljy", "doClick");
        Intent intent = new Intent("BC1");//必须和上面广播过滤器中参数一致,reciver才能接收到广播。
        intent.putExtra("msg", "test1");
        Bundle bundle = new Bundle();
        bundle.putString("msgString", "test2");
        intent.putExtras(bundle);
//        sendBroadcast(intent);无序广播
        sendOrderedBroadcast(intent,null);//有序广播
    }



广播接收器代码:


public class BC1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("ljy","-----BC1----getStringExtra-------->"+intent.getStringExtra("msg"));
        Log.d("ljy","------BC1----getBundle--------------->"+intent.getExtras().getString("msgString"));
    }
}

上面是动态广播的注册,下面介绍静态广播的注册:

在manifest中添加如下代码即可注册:

<receiver android:name=".broadcast.BC1">
            <intent-filter
                android:priority="100">
                <action android:name="BC1"></action>
            </intent-filter>
        </receiver>

这里的priority是设置广播的优先级,从-1000到1000.优先级越大,接收广播越靠前。


有序广播中如果了设置自定义权限,应用中如果没有设置此权限是无法接收此广播的。设置权限如下:

代码中: 
public void doClick(View v) {
        Log.d("ljy", "doClick");
        Intent intent = new Intent("BC1");
        intent.putExtra("msg", "test1");
        Bundle bundle = new Bundle();
        bundle.putString("msgString", "test2");
        intent.putExtras(bundle);
//        sendBroadcast(intent);无序广播
        sendOrderedBroadcast(intent, "socct.application.myBroadCast");//有序广播
        
    }
</pre><pre name="code" class="html">manifest中
<permission android:name="socct.application.myBroadCast"></permission>  //自定义权限
<uses-permission android:name="socct.application.myBroadCast"></uses-permission> //应用权限 ,如果不添加该权限,应用是无法接收该广播的







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值