文章目录
Android开发 - Broadcast的使用
前言
- 本博客示例代码详情参见Project-foodlist
- 记录一下Android 8.0(SDK 26+)后的Broiadcast的不同以及使用
1. Android 8.0 新特性
-
从清单文件中移除广播接收器
由于 Android 8.0 引入了新的广播接收器限制,因此您应该移除所有为隐式广播 Intent 注册的广播接收器。将它们留在原位并不会在构建时或运行时令应用失效,但当应用运行在 Android 8.0 上时它们不起任何作用。显式广播 Intent(只有您的应用可以响应的 Intent)在 Android 8.0 上仍以相同方式工作。这个新增限制有一些例外情况。如需查看在以 Android 8.0 为目标平台的应用中仍然有效的隐式广播的列表,请参阅隐式广播例外。
2. 静态广播
以下2.1-2.3部分内容Android 8.0 以上不适用,Android 8.0 在此稍作修改,后面会介绍到。
2.1. 接收器
在静态广播类StaticReceiver 中重写onReceive 方法,当接收到对应广播时进行数据处理,产生通知。
public class StaticReceiver extends BroadcastReceiver {
private static final String STATICACTION = "com.example.petter.broadcast.MyStaticFilter";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(STATICACTION) ){
//do something
}
}
}
2.2. 注册
在AndroidMainfest.xml 中进行注册。
<receiver android:name=".StaticReceiver">
<intent-filter>
<action android:name="com.example.petter.broadcast.MyStaticFilter" />
</intent-filter>
</receiver>
2.3. 发送广播
利用bundle 和intent 将图片与文字内容发送出去
Intent intentBroadcast = new Intent(STATICACTION); //定义Intent
//可选择, 利用bundle传递数据
// Bundle bundelse = new Bundle();
// intentBroadcast.putExtras(bundles);
sendBroadcast(intentBroadcast);
参考代码中的STATICATION 为自己设定的广播名称。
Android 8.0 静态广播
由于Android 8.0废除大部分静态广播,对于代码需要修改某些部分
扫描二维码关注公众号,回复:
3938564 查看本文章
- 发送广播部分需要设置
ComponetName
Intent intent = new Intent(STATICACTION); intent.setComponent(new ComponentName("com.example.petter.broadcast", "com.example.petter.broadcast.StaticReceiver")); sendBroadcast(intent);
- ComponetName(“自定义广播的包名”, “自定义广播的路径”)
3. 动态广播
3.1. 接收器
实现BroadcastReceiver子类(这里命名为DynamicReceiver),并且重写onReceive方法,修改方法与静态广播类中类似。
public class DynamicReceiver extends BroadcastReceiver {
private static final String DYNAMICACTION = "com.example.petter.broadcast.MyDynamicFilter";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(DYNAMICACTION)) { //动作检测
// do something
}
}
}
3.2. 注册广播
IntentFilter dynamic_filter = new IntentFilter();
dynamic_filter.addAction(DYNAMICACTION); //添加动态广播的Action
DynamicReceiver dynamicReceiver = new DynamicReceiver();
registerReceiver(dynamicReceiver, dynamic_filter); //注册自定义动态广播消息
3.3. 注销广播
unregisterReceiver(dynamicReceiver);
其中dynamicReceiver 为我们之前实例的DynamicReceiver
类。用registerReceiver
与unregisterReceiver
分别对其进行注册与注销。
3.4. 发送广播
Intent intentBroadcast = new Intent(); //定义Intent
intentBroadcast.setAction(DYNAMICACTION);
// 可以使用bundle传送数据
sendBroadcast(intentBroadcast);