android 之 Broadcast(广播) BroadcastReceiver(广播接收者)

在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 
活动(Activity) - 用于表现功能 
服务(Service) - 相当于后台运行的 Activity 
广播(Broadcast) - 用于发送广播 
广播接收器(BroadcastReceiver) - 用于接收广播 
Intent - 用于连接以上各个组件,并在其间传递消息 
================================================== ======================== 
BroadcastReceiver: 

  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程。

首先:需要把要注册一个广播的过滤器,把符合打件的动作进行拦截。处行处理。

	private static final String MENU_DELETE="com.hkrt.delete.user";
	private DeleteUserBroadcastReceiver receiver;
	protected void onResume() {
		getListUsers();
		//在Resume状态下注册一个Broadcast
		IntentFilter filter = new IntentFilter(MENU_DELETE);
		receiver = new DeleteUserBroadcastReceiver();
		registerReceiver(receiver, filter);
		super.onResume();
	}


注:只要是符合MENU_DELETE的动作就会执行一个动作接收者回调的方法。
第二:编写接收广播接收的实体类。

	//提供一个外部Activity触发的入口
	class DeleteUserBroadcastReceiver extends BroadcastReceiver
	{
		@Override
		public void onReceive(Context context, Intent intent)
		{
			StringBuilder builder = new StringBuilder();
			boolean first = true;
			for(int i=0;i<users.size();i++)
			{
				User user = users.get(i);
				if(user.isSelected())
				{
					if(!first)
					{
						builder.append(" or ");
					}
					builder.append("user_id = ");
					builder.append(user.getId());
					
					first = false;
				}
			}
			String deleteAccountIdStr = builder.toString();
			Log.d("hkrt debug", builder.toString());
			//如果为空字符串就是没有选择删除条目
			if(!deleteAccountIdStr.equals(""))
			{
				db.open();
				db.delete(deleteAccountIdStr, null);
				db.close();
				//再次查询,以刷新ListView
				getListUsers();
			}
			
		}
	}
第三:在需要的时候把这个广播发送出去。

 Intent deleteUserIntent = new Intent();
 deleteUserIntent.setAction(MENU_DELETE);
 sendBroadcast(deleteUserIntent);


原文地址:https://www.cnblogs.com/java20130726/p/3218332.html