我是android新手。我想知道Intent
和BroadcastReceiver
之间的区别。我对BroadcastReceiver
比Intent
更加困惑。
请帮帮我。简单的代码会有所帮助。
答案 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设备也可以发送这些系统范围的广播,包括电池电量不足或设备启动等。