Android广播接收器

时间:2010-08-30 09:54:34

标签: android

我是android新手。我想知道IntentBroadcastReceiver之间的区别。我对BroadcastReceiverIntent更加困惑。

请帮帮我。简单的代码会有所帮助。

2 个答案:

答案 0 :(得分:30)

好的,我将以一个例子来解释它。

我们假设我想创建一个应用程序来检查它的网页上的地铁状态。如果地铁工作正常,我也想要系统通知。

我会:

  • 显示结果的Activity
  • 检查地铁是否正常工作Service,如果地铁不工作则会显示通知。
  • 名为Broadcast Receiver的{​​{1}}每15分钟拨打一次服务。

让我给你看一些代码:

Alarm Receiver

说明: 如您所见,您可以设置闹钟。收到警报后,我们使用/* AlarmReceiver.java */ public class AlarmReceiver extends BroadcastReceiver { public static final String ACTION_REFRESH_SUBWAY_ALARM = "com.x.ACTION_REFRESH_SUBWAY_ALARM"; @Override public void onReceive(Context context, Intent intent) { Intent startIntent = new Intent(context, StatusService.class); context.startService(startIntent); } } 启动intent。基本上service是一个msg,它可以有动作,一个序列化的东西。

intent

说明:

public class StatusService extends Service { @Override public void onCreate() { super.onCreate(); mAlarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intentToFire = new Intent(AlarmReceiver.ACTION_REFRESH_ALARM); mAlarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); } @Override public void onStart(Intent intent, int arg1) { super.onStart(intent, arg1); Log.d(TAG, "SERVICE STARTED"); setAlarm(); Log.d(TAG, "Performing update!"); new SubwayAsyncTask().execute(); stopSelf(); } private void setAlarm() { int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; mAlarms.setInexactRepeating(alarmType, SystemClock.elapsedRealtime() + timeToRefresh(), AlarmManager.INTERVAL_HALF_DAY, mAlarmIntent); } } 开始并且:

  • 设置下次通话的闹钟。 (检查它的使用意图。只是一个消息)
  • 致电service,负责更新通知AsyncTask

粘贴Activity没有意义,但完成后调用:

AsyncTask

这会创建一个具有特定private void sendSubwayUpdates(LinkedList<Subway> subways) { Intent intent = new Intent(NEW_SUBWAYS_STATUS); intent.putExtra("subways", subways); sendBroadcast(intent); } 操作的新Intent,将意图放入地铁和NEW_SUBWAYS_STATUS。如果有人有兴趣获得该信息,它将有一个接收器。

我希望我能说清楚。

PS:几天前,有人以非常酷的方式解释了广播和意图。 有人想分享他的啤酒,所以他发了一个广播 意图采取行动:“FREE_BEER”并额外增加:“一杯啤酒”。

答案 1 :(得分:3)

API声明:

BroadcastReceiver是接收sendBroadcast()发送的意图的代码的基类。

意图是要执行的操作的抽象描述。

因此,BroadcastReceiver只是一个响应Intents的Activity。您可以发送自己的广播,甚至Android设备也可以发送这些系统范围的广播,包括电池电量不足或设备启动等。