BroadCastReciver

来源:互联网 发布:人工智能的利弊 编辑:程序博客网 时间:2024/06/05 08:26


闲暇时间研究了下 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
原创粉丝点击