• 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);


  • 相关阅读:
    OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用
    OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用
    Java实现蓝桥杯墓地雕塑
    Java实现蓝桥杯墓地雕塑
    求一亿以内的回文质数(素数)
    求一亿以内的回文质数(素数)
    求一亿以内的回文质数(素数)
    Java实现 LeetCode 232 用栈实现队列
    Java实现 LeetCode 232 用栈实现队列
    Java实现 LeetCode 232 用栈实现队列
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218332.html
Copyright © 2020-2023  润新知