前言
了解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();//截断广播
}
}
再运行下: