Android开发四大组件——broadcastReceiver基本使用介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发四大组件——broadcastReceiver基本使用介绍相关的知识,希望对你有一定的参考价值。
问题背景
安卓日常开发和学习过程中,可能会时不时的用到或者接触到广播。通常理解广播有动态注册和配置文件中静态注册两种方式。本文会对两种方式进行介绍。
问题分析
首先看下Google官方声明: Beginning with android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers. If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that do not target your app specifically). 翻译如下: 从Android 8.0(API级别26)开始,系统对清单声明的接收器施加了额外的限制。如果您的应用程序以API级别26或更高为目标,则不能使用清单声明大多数隐式广播(不以应用程序为目标的广播)的接收方。 也就是说,从Android 8.0开始,系统对广播的静态注册做了限制,如果使用了自定义静态注册广播,那么不能通过隐式广播的方式进行接收。
问题解决
1、广播动态注册使用
(1)定义自己的广播接收类,代码如下:
/**
* @author baorant
*/
public class MyBroadcastReceiver2 extends BroadcastReceiver
private static final String TAG = "MyBaorantReceiver2";
@Override
public void onReceive(Context context, Intent intent)
Log.d(TAG, "MyBroadcastReceiver2 onReceive begin");
(2)在activity中动态注册,配置action,代码如下:
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
...
registerBroadReceiver();
private void registerBroadReceiver()
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("MyBroadcastReceiver2");
MyBroadcastReceiver2 myBroadcastReceiver = new MyBroadcastReceiver2();
registerReceiver(myBroadcastReceiver, intentFilter);
(3)在本应用或者其他应用中可以发送隐式广播,代码如下:
sendBroadBtn5.setOnClickListener(v ->
Intent intent = new Intent("MyBroadcastReceiver2");
sendBroadcast(intent);
);
运行结果如下:
2、广播静态注册使用
(1)定义自己的广播接收类,代码如下:
/**
* @author baorant
*/
public class MyBroadcastReceiver extends BroadcastReceiver
private static final String TAG = "TestBaorantBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent)
Log.d(TAG, "TestBaorantBroadcastReceiver onReceive begin");
(2)manifest中进行静态注册,代码如下:
<receiver android:name=".MyBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="baorant"/>
</intent-filter>
</receiver>
(3)本应用或者三方应用中进行显示广播,代码如下:
// setPackage方式
sendBroadBtn3.setOnClickListener(v ->
Intent intent = new Intent("baorant");
intent.setPackage("com.baorant.providerapplication");
sendBroadcast(intent);
);
// setComponent方式
sendBroadBtn4.setOnClickListener(v ->
Intent intent = new Intent("baorant");
intent.setComponent(new ComponentName("com.baorant.providerapplication", "com.baorant.providerapplication.MyBroadcastReceiver"));
sendBroadcast(intent);
);
运行结果如下:
问题总结
本文对四大组件之一的广播进行了简单介绍,包括动态注册广播,以及对Android 8.0以后系统对静态广播的限制,禁用了隐式广播访问静态注册的广播接收器,介绍了两种显示访问静态注册的广播接收器的方式。有兴趣的同学可以进一步深入研究。
以上是关于Android开发四大组件——broadcastReceiver基本使用介绍的主要内容,如果未能解决你的问题,请参考以下文章