ITEEDU

BroadCast

广播者:

任何地方

Intent intent = new Intent(ACTION); 
sendBroadcast(intent);

接收者:

  • 继承自BroadcastReceiver
  • 实现了onReceive(Context context, Intent intent)
  • 在AndroidManifest.xml中注册了自己<receiver android:name="name">
  • 注册的receiver 的<intent-filter> 中action的类型与广播者的Intent的ACTION相同才接收。
public class ActivityMain extends Activity {
	public static final int ITEM0 = Menu.FIRST;
	public static final int ITEM1 = Menu.FIRST + 1;

	static final String ACTION_1 = " NEW_BROADCAST_1";
	static final String ACTION_2 = " NEW_BROADCAST_2";
	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.main);
	}
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(0, ITEM0, 0, "显示Notification");
		menu.add(0, ITEM1, 0, "清除Notification");
		menu.findItem(ITEM1);
		return true;
	}
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case ITEM0:
			actionClickMenuItem1();
			break;
		case ITEM1:
			actionClickMenuItem2();
			break;
		}
		return true;
	}
	private void actionClickMenuItem1() {
		Intent intent = new Intent(ACTION_1);
		sendBroadcast(intent);
	}
	private void actionClickMenuItem2() {
		Intent intent = new Intent(ACTION_2);
		sendBroadcast(intent);
	}
}

public class Receiver1 extends BroadcastReceiver {
	Context context;
	public static int NOTIFICATION_ID = 21321;
	@Override
	public void onReceive(Context context, Intent intent) {
		this.context = context;
		showNotification();
	}
	private void showNotification() {
		NotificationManager notificationManager =
			(NotificationManager) context.getSystemService(
					android.content.Context.NOTIFICATION_SERVICE);
		Notification notification = 
			new Notification(R.drawable.icon,
				"在Receiver1中", 
				System.currentTimeMillis());
		PendingIntent contentIntent = 
			PendingIntent.getActivity(context, 0,
				new Intent(context, ActivityMain.class), 0);
		notification.setLatestEventInfo(
				context, "在Receiver1中", null,
				contentIntent);
		notificationManager.notify(NOTIFICATION_ID, notification);
	}
}

public class Receiver2 extends BroadcastReceiver {
	Context context;
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		this.context = context;
		DeleteNotification();
	}
	private void DeleteNotification() {		
		NotificationManager notificationManager = 
			(NotificationManager) context.getSystemService(
						android.content.Context.NOTIFICATION_SERVICE);
		notificationManager.cancel(
				Receiver1.NOTIFICATION_ID);
	}
}
<receiver android:name="dReceiver1">
			<intent-filter>
				<action
					android:name=" NEW_BROADCAST_1"/>
			</intent-filter>
		</receiver>
		<receiver android:name="Receiver2">
			<intent-filter>
				<action
					android:name=" NEW_BROADCAST_2"/>
			</intent-filter>
		</receiver>