首页 > 学院 > 开发设计 > 正文

广播的使用

2019-11-08 01:40:48
字体:
来源:转载
供稿:网友

一共分三步

1.定义一个BroadcastReceiver广播接收类2.注册该广播3.触发响应

1. 概念

广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理)

一个应用可以在发生特定事件时发送Broadcast, 系统中任何应用只要注册了对应Receiver就会接收到此Broadcast

一个应用如果对某个广播感兴趣, 就可以注册对应的Receiver来接收广播

广播事件机制是应用程序(进程间)之间通信的一种手段

2. 相关 API

//ContextsendBroadcast(Intent intent) : 发送一般广播sendOrderedBroadcast(Intent intent) : 发送有序广播registerReceiver(receiver, intentFilter) : 注册广播接收器unRegisterReceiver(receiver) : 解注册广播接收器//BroadcastReceiveronReceive(Context context, Intent intent) : 接收到广播的回调abortBroadcast() : 中断广播的继续传播boolean isOrderedBroadcast() : 判断是否是有序广播

3. 常见系统广播

收到短信广播 : android.PRovider.Telephony.SMS_RECEIVED开机完成广播 : Intent.ACTION_BOOT_COMPLETED应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED手机锁屏 : Intent.ACTION_SCREEN_OFF手机开屏 : Intent.ACTION_SCREEN_ON

4. 编写 BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent){ //处理广播 }}private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(ACTION_NAME)){ Toast.makeText(Test.this, "处理action名字相对应的广播", 200); } } };

5. 注册广播接收器类

5.1 方式一: 配置文件注册(静态注册)

<receiver android:name="com.lizi.MyBroadcastReceiver"> <!--priority指定当前receiver的优先级, 值是0-1000, 越大越好 --> <intent-filter android:priority="500"> <action android:name="com.lizi.mybroadcastreceiver"/> </intent-filter> </receiver>

5.2 方式二: 硬编码注册(动态注册)

public void registerBoradcastReceiver(){ IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(ACTION_NAME); //注册广播 registerReceiver(mBroadcastReceiver, myIntentFilter); }

5.3 区别静态注册与动态注册

这里写图片描述

5.4 有序广播和无序广播

发送一般广播

context.sendBroadCast(Intent intent)

发送有序广播

context.sendOrderedBroadcast(Intent intent)

区别

这里写图片描述

6. 触发响应

mBtnMsgEvent = new Button(this); mBtnMsgEvent.setText("发送广播"); mBtnMsgEvent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent mIntent = new Intent(ACTION_NAME); mIntent.putExtra("yaner", "发送广播,相当于在这里传送数据"); //发送广播 sendBroadcast(mIntent); } });

7. 完整源码

package my.yaner;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;public class Test extends Activity{ private final String ACTION_NAME = "发送广播"; private Button mBtnMsgEvent = null; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //注册广播 registerBoradcastReceiver(); LinearLayout mLinearLayout = new LinearLayout(this); mBtnMsgEvent = new Button(this); mBtnMsgEvent.setText("发送广播"); mLinearLayout.addView(mBtnMsgEvent); setContentView(mLinearLayout); mBtnMsgEvent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent mIntent = new Intent(ACTION_NAME); mIntent.putExtra("yaner", "发送广播,相当于在这里传送数据"); //发送广播 sendBroadcast(mIntent); } }); } private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(ACTION_NAME)){ Toast.makeText(Test.this, "处理action名字相对应的广播", 200); } } }; public void registerBoradcastReceiver(){ IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(ACTION_NAME); //注册广播 registerReceiver(mBroadcastReceiver, myIntentFilter); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表