BroadCastReciver


闲暇时间研究了下 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> //应用权限 ,如果不添加该权限,应用是无法接收该广播的


 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值