gpt4 book ai didi

Android-广播接收器

转载 作者:可可西里 更新时间:2023-11-01 19:10:10 25 4
gpt4 key购买 nike

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

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

最佳答案

好吧,我会用一个例子来解释它。

假设我想创建一个应用程序来从它的网页检查地铁状态。如果地铁运行不正常,我还想要系统通知。

我会:

  • 用于显示结果的 Activity
  • 一个服务,用于检查地铁是否正常运行,如果不正常则显示通知。
  • 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 是一个可以有 Action 的消息,一个序列化的东西。

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

}

解释:

服务启动并且:

  • 设置下一个电话的闹钟。 (检查它使用的 Intent 。只是一条消息)
  • 调用 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 放入 Intent 中。如果有人有兴趣获取该信息,它将有一个接收器。

我希望我说清楚了。

PS:前几天有人用很酷的方式解释了broadcast和intents。有人想分享他的啤酒,于是他发了一条广播 Intent 有行动:“FREE_BEER”和额外的:“一杯啤酒”。

关于Android-广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com