Я новичок в 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
- это msg, который может иметь действия, сериализованный материал.
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
, помещенным внутри намерений в метро и sendBroadcast
. Если кто-то заинтересован в получении этой информации, у него будет приемник.
Надеюсь, я поняла.
PS: Несколько дней назад кто-то объяснял трансляцию и намерения очень здорово. Кто-то хочет поделиться своим пивом, поэтому он отправляет трансляцию с намерением иметь действие: "FREE_BEER" и с дополнительным: "Стакан пива".
В API говорится:
A BroadcastReceiver
- базовый класс для кода, который будет получать намерения, отправленные sendBroadcast()
.
Цель - абстрактное описание выполняемой операции.
Итак, a BroadcastReceiver
- это просто действие, которое отвечает на намерения. Вы можете отправлять свои собственные трансляции или даже Android-устройство может отправлять эти широковещательные широковещательные системы, включая такие вещи, как батарея, низкая или просто загруженное устройство.