第十三单元总结

文章介绍了如何在Android中使用EventBus进行事件发布/订阅,以及全局广播和本地广播的注册、发送与接收。还展示了BroadcastReceiver结合Notification创建通知以及通过BroadcastReceiver实现界面更新的消息传递。
摘要由CSDN通过智能技术生成

广播接收者应用

EventBus

定义:EventBus是系统、应用、控件、线程间发布/订阅事件的第三方框架

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

compile 'org.greenrobot:eventbus:3.0.0'

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

@Override

protected void onCreate(Bundle savedInstanceState) {

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(实参);

2:全局广播-案例

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

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

本地广播:

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

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

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

public class MyReceiver extends BroadcastReceiver {

private static final String TAG = "MyReceiver";

@Override

public void onReceive(Context context, Intent intent) {

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

}

}

第二步:获得LocalBroadcastManager并注册BroadcastReceiver

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

send = findViewById(R.id.send);

send.setOnClickListener(this);

//创建一个本地广播

localBroadcastManager = LocalBroadcastManager.getInstance(this);

//动态注册一个广播

myReceiver = new MyReceiver();

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction("com.feng");

localBroadcastManager.registerReceiver(myReceiver,intentFilter); }

第三步:发送广播

@Override

public void onClick(View v) {

int id = 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);

}

}

3:

BroadCastReceiver结合Notifcation

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

public class MyReceiver extends BroadcastReceiver {

private static final String TAG = "MyReceiver";

@Override

public void onReceive(Context context, Intent intent) {

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

Notification.Builder builder = 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 = new Intent(context,Main2Activity.class);

PendingIntent activity = 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

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

send = findViewById(R.id.send);

send.setOnClickListener(this);

//创建一个本地广播

localBroadcastManager = LocalBroadcastManager.getInstance(this);

//动态注册一个广播

myReceiver = new MyReceiver();

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction("com.feng");

localBroadcastManager.registerReceiver(myReceiver,intentFilter); }

第三步:发送广播

@Override

public void onClick(View v) {

int id = 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);

}

}

4:BroadCastReceiver实现消息传递

布局XML

<LinearLayout xmlns: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="更新一个图片" />

<ImageView android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/image_id"

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

</LinearLayout>

Activity核心代码

public class Main2Activity extends AppCompatActivity {

private Button updataUiId;

private ImageView imageId;

private MyReceiver2 myReceiver2;

private Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

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);

IntentFilter intentFilter = new IntentFilter();

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

registerReceiver(myReceiver2,intentFilter);

updataUiId.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

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

sendBroadcast(intent);

}

});

}

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(myReceiver2);

}

}

public class MyReceiver2 extends BroadcastReceiver {

private Handler handler;

private ImageView imageView;

public MyReceiver2(Handler handler, ImageView imageView) {

super();

this.handler = handler;

this.imageView = imageView;

}

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

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

handler.post(new Runnable() {

@Override

public void run() {

imageView.setImageResource(R.mipmap.ic_launcher_round);

}

});

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值