四大组件之一BroadcastReceiver

前言

了解android四大组件是最基本的,所以要熟记,当然对于用惯了第三方的组件之后就感觉用到的很少,所以基本的还是会忘记,所以就当作笔记记录下来吧。

广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写:

public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据;

1.注册方法

静态注册广播

动态注册广播

静态注册广播

静态注册就是在清单文件中进行注册,Manifast.xml中进行注册

静态注册广播

静态注册就是在清单文件里面注册


动态注册广播


当然上图我写的是类部类所以会有一个美元符。

就是通过java代码去注册而不是在清单文件里面去配置

MyReceiver receiver=newMyReceiver();//广播接受者实例IntentFilter intentFilter=newIntentFilter();        intentFilter.addAction("edu.jju.broadcastreceiver");        registerReceiver(receiver,intentFilter);

普通广播

1, 我么先定义一个类MyReceiver去继承BroadcastReceiver。并重写里面的方法

代码如下:

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

importandroid.widget.Toast;

public class MyReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"我接受到啦!!!",Toast.LENGTH_SHORT).show();      }

}

当有广播时,就会调用onReceive方法

MainActivity.java代码如下:

import android.content.Intent;

import android.content.IntentFilter;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

public class MainActivity extends AppCompatActivity{

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);   

}

/**   

* 这是绑定按钮添加的事件   

*@param view   

*/

public void send(View view) {

/*这是通过静态注册的广播*/

Intent intent =newIntent();       

intent.setAction("edu.jju.broadcastreceiver");       

sendBroadcast(intent);//发送普通广播

}

}

运行结果:


也可以通过动态注册来实现,可以不需要在清单文件配置。修改的代码如下:

/**   

* 这是绑定按钮添加的事件   

*@param view   

*/

public void send(View view) {       

MyReceiver receiver =newMyReceiver();//广播接受者实例IntentFilter

intentFilter =newIntentFilter(); 

intentFilter.addAction("edu.jju.broadcastreceiver");       

registerReceiver(receiver, intentFilter);       

Intent intent =newIntent();       

intent.setAction("edu.jju.broadcastreceiver");       

sendBroadcast(intent);//发送普通广播

}

运行效果是一样的

有序广播

接下来我们定义四个广播来演示下 A B C D,然后它们是接收相同的广播。

可以看到,我们是通过静态注册的方式,而且是接受相同的广播, 在每个广播接收者中打印log

然后运行:


可以看到,我们发送一条广播,广播接收者都接受到了该广播。默认的是按在清单文件注册顺序接受的。我们可以改它们的优先级

修改代码如下

优先级设置为MyReceiver 100 , MyReceiverA 200 , MyReceiverB 50 , MyReceiverC 300

再运行下



可以看到优先级高的,先接收到广播

我们也可以截断这条广播,我们就在MyReceiverA 这里截断试下

修改下MyReceiverA 代码:

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

public class MyReceiverA extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {       

Log.i("TAG"," MyReceiverA 广播 ");       

abortBroadcast();//截断广播

}

}

再运行下:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容