广播接收者应用

文章介绍了在Android中如何使用EventBus进行事件发布和订阅,以及BroadcastReceiver进行全局和本地广播的注册、发送与接收,包括结合Notification展示通知及在Activity间传递消息的应用场景。
摘要由CSDN通过智能技术生成

第一步:首先在gradle文件中添加EventBus的依赖

compile 'org.greenrobot:eventbus:3.0.0'

第二步:在相关Activity中的onCreat()、onDestory()注册和解注EventBus

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

EventBus.getDefault().register(this);

}

@Override

protected void onDestroy() {

super.onDestroy();

EventBus.getDefault().unregister(this);

}

第三步:事件发布者如何发布事件

EventBus.getDefault().post(实参);

全局广播-案例

全局广播:

发送的广播事件可被其他应用程序获取,也能响应其他应用程序发送的广播事件(可以通过exported–是否监听其他应用程序发送的广播 在清单文件中控制)全局广播既可以动态注册,也可以静态注册。

默认发送的广播,就是全局广播,所有的App都可以请求接受

本地广播:

发送的广播事件不被其他应用程序获取,也不能响应其他应用程序发送的广播事件。动态注册或方法时需要用到LocalBroadcastManager。

本地广播只能动态注册,不能静态注册。

第一步:新建一个类继承BroadcastReceiver

publicclass MyReceiverextends BroadcastReceiver{

private static final String TAG = "MyReceiver";

@Override

public void onReceive(Contextcontext,Intent intent) {

Log.i(TAG,"onReceive:");

}

}

第一步:新建一个类继承BroadcastReceiver

publicclass MyReceiverextends BroadcastReceiver{

private static final String TAG = "MyReceiver";

@Override

public void onReceive(Contextcontext,Intent intent) {

Log.i(TAG,"onReceive:");

}

}

第二步:获得LocalBroadcastManager并注册BroadcastReceiver

publicclass MainActivityextends AppCompatActivityimplements View.OnClickListener{

@Override

protected void onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

send = findViewById(R.id.send);

send.setOnClickListener(this);

//创建一个本地广播

localBroadcastManager= LocalBroadcastManager.getInstance(this);

//动态注册一个广播

myReceiver= new MyReceiver();

IntentFilterintentFilter= new IntentFilter();

intentFilter.addAction("com.feng");

localBroadcastManager.registerReceiver(myReceiver,intentFilter); }

第三步:发送广播

@Override

public void onClick(Viewv) {

intid = v.getId();

switch (id) {

case R.id.send:

Intent intent= new Intent();

intent.setAction("com.feng");

//注意广播的发送者

localBroadcastManager.sendBroadcast(intent);

break;

default:

break;

} }

第三步:发送广播

@Override

protected void onDestroy(){

super.onDestroy();

//有注册就有销毁

localBroadcastManager.unregisterReceiver(myReceiver);

}

}

BroadCastReceiver结合Notifcation

第一步:新建一个类继承BroadcastReceiver

publicclass MyReceiverextends BroadcastReceiver{

private static final String TAG = "MyReceiver";

@Override

public void onReceive(Contextcontext,Intent intent) {

Log.i(TAG,"onReceive:");

Notification.Builderbuilder = new Notification.Builder(context);

builder.setAutoCancel(true);

builder.setSmallIcon(R.mipmap.ic_launcher);

builder.setContentText("标题");

builder.setContentText("内容");

//可弹出

builder.setPriority(Notification.PRIORITY_MAX);

builder.setDefaults(Notification.DEFAULT_ALL);

//可跳转

Intent intent1 = newIntent(context,Main2Activity.class);

PendingIntentactivity = PendingIntent.getActivity(context,0, intent1, PendingIntent.FLAG_CANCEL_CURRENT);

builder.setContentIntent(activity);

Notification build = builder.build();

NotificationManager manager =(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

manager.notify(1,build);

}

}

第二步:注册BroadcastReceiver

publicclass MainActivityextends AppCompatActivityimplements View.OnClickListener{

@Override

protected void onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

send = findViewById(R.id.send);

send.setOnClickListener(this);

//创建一个本地广播

localBroadcastManager= LocalBroadcastManager.getInstance(this);

//动态注册一个广播

myReceiver= new MyReceiver();

IntentFilterintentFilter= new IntentFilter();

intentFilter.addAction("com.feng");

localBroadcastManager.registerReceiver(myReceiver,intentFilter); }

第三步:发送广播

@Override

public void onClick(Viewv) {

intid = v.getId();

switch (id) {

case R.id.send:

Intent intent= new Intent();

intent.setAction("com.feng");

//注意广播的发送者

localBroadcastManager.sendBroadcast(intent);

break;

default:

break;

} }

第三步:发送广播

@Override

protected void onDestroy(){

super.onDestroy();

//有注册就有销毁

localBroadcastManager.unregisterReceiver(myReceiver);

}

}

BroadCastReceiver实现消息传递

布局XML

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".Main2Activity">

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/updata_ui_id"

android:text="更新一个图片"/>

<ImageViewandroid:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/image_id"

android:src="@mipmap/ic_launcher"/>

</LinearLayout>

Activity核心代码

publicclass Main2Activity extends AppCompatActivity{

private Button updataUiId;

private ImageViewimageId;

private MyReceiver2 myReceiver2;

private Handler handler= new Handler(){

@Override

public void handleMessage(Messagemsg){

super.handleMessage(msg);

}

};

Activity核心代码

@Override

protected void onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

updataUiId= findViewById(R.id.updata_ui_id);

imageId= findViewById(R.id.image_id);

myReceiver2 = new MyReceiver2(handler,imageId);

IntentFilterintentFilter= new IntentFilter();

intentFilter.addAction("com.feng.ui");

registerReceiver(myReceiver2,intentFilter);

Activity核心代码

updataUiId.setOnClickListener(newView.OnClickListener(){

@Override

public void onClick(Viewv) {

Intent intent= new Intent();

intent.setAction("com.feng.ui");

sendBroadcast(intent);

}

});

}

@Override

protected void onDestroy(){

super.onDestroy();

unregisterReceiver(myReceiver2);

}

}

Activity核心代码

publicclass MyReceiver2 extends BroadcastReceiver{

private Handler handler;

private ImageViewimageView;

public MyReceiver2(Handler handler,ImageViewimageView){

super();

this.handler= handler;

this.imageView= imageView;

}

Activity核心代码

@Override

public void onReceive(Contextcontext,Intent intent) {

String action = intent.getAction();

if ("com.feng.ui".equals(action)){

handler.post(newRunnable() {

@Override

public void run() {

imageView.setImageResource(R.mipmap.ic_launcher_round);

}

});

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值