美文网首页
四大组件之一BroadcastReceiver

四大组件之一BroadcastReceiver

作者: 猿ape | 来源:发表于2017-11-09 14:34 被阅读0次

前言

了解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();//截断广播

}

}

再运行下:


相关文章

网友评论

      本文标题:四大组件之一BroadcastReceiver

      本文链接:https://www.haomeiwen.com/subject/uzhemxtx.html