我是android新手,想了解 Intent
和 BroadcastReceiver
的区别。我对 BroadcastReceiver
比 Intent
更加困惑。
请帮帮我。代码示例会很有帮助。
我是android新手,想了解 Intent
和 BroadcastReceiver
的区别。我对 BroadcastReceiver
比 Intent
更加困惑。
请帮帮我。代码示例会很有帮助。
好的,我将用一个例子来解释。
假设我想创建一个应用程序来从地铁网页上检查地铁状态。 如果地铁不正常工作,我还希望获得系统通知。
我需要:
Activity
来显示结果。Service
来检查地铁是否正常工作并在不正常时显示通知。Broadcast Receiver
名为 Alarm Receiver
,每 15 分钟调用一次服务。让我展示一些代码:
/* 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
。基本上,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);
}
这将创建一个带有特定NEW_SUBWAYS_STATUS
操作的新Intent
,将地铁信息放入意图中并sendBroadcast
。如果有人对获取该信息感兴趣,就会有一个接收器。
希望我表述清楚了。
附注:几天前,有人以一种非常酷的方式解释广播和意图。 有人想分享他的啤酒,所以他发送了一个带有操作:“FREE_BEER”和额外信息:“一杯啤酒”的意图广播。
API中说明:
BroadcastReceiver
是一个基类,用于接收由sendBroadcast()
发送的意图。
意图是要执行的操作的抽象描述。
因此,BroadcastReceiver
只是一个响应意图的活动。您可以发送自己的广播,甚至Android设备可以发送这些系统范围的广播,包括诸如电池电量低或设备刚刚启动等内容。