本文共 3925 字,大约阅读时间需要 13 分钟。
一共分三步
广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理)
一个应用可以在发生特定事件时发送Broadcast, 系统中任何应用只要注册了对应Receiver就会接收到此Broadcast
一个应用如果对某个广播感兴趣, 就可以注册对应的Receiver来接收广播
广播事件机制是应用程序(进程间)之间通信的一种手段
//ContextsendBroadcast(Intent intent) : 发送一般广播sendOrderedBroadcast(Intent intent) : 发送有序广播registerReceiver(receiver, intentFilter) : 注册广播接收器unRegisterReceiver(receiver) : 解注册广播接收器//BroadcastReceiveronReceive(Context context, Intent intent) : 接收到广播的回调abortBroadcast() : 中断广播的继续传播boolean isOrderedBroadcast() : 判断是否是有序广播
收到短信广播 : android.provider.Telephony.SMS_RECEIVED开机完成广播 : Intent.ACTION_BOOT_COMPLETED应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED手机锁屏 : Intent.ACTION_SCREEN_OFF手机开屏 : Intent.ACTION_SCREEN_ON
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); } } };
public void registerBoradcastReceiver(){ IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(ACTION_NAME); //注册广播 registerReceiver(mBroadcastReceiver, myIntentFilter); }
发送一般广播
context.sendBroadCast(Intent intent)
发送有序广播
context.sendOrderedBroadcast(Intent intent)
区别
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); } });
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); }}