Tôi mới sử dụng Android. Tôi biết điều gì để biết sự khác biệt giữa Intent
và BroadcastReceiver
. Tôi bối rối hơn với BroadcastReceiver
hơn Intent
.Máy phát Android-Broadcast
Hãy giúp tôi. Mã đơn giản sẽ hữu ích.
Tôi mới sử dụng Android. Tôi biết điều gì để biết sự khác biệt giữa Intent
và BroadcastReceiver
. Tôi bối rối hơn với BroadcastReceiver
hơn Intent
.Máy phát Android-Broadcast
Hãy giúp tôi. Mã đơn giản sẽ hữu ích.
Ok, tôi sẽ giải thích nó với một ví dụ.
Giả sử tôi muốn tạo ứng dụng để kiểm tra trạng thái tàu điện ngầm từ trang web của trang web đó. Tôi cũng muốn có một thông báo hệ thống nếu tàu điện ngầm không hoạt động tốt.
tôi sẽ có:
Activity
để hiển thị kết quả.Service
để kiểm tra xem tàu điện ngầm có hoạt động hay không và hiển thị thông báo nếu nó không hoạt động.Broadcast Receiver
gọi là Alarm Receiver
để gọi dịch vụ sau 15 phút.Hãy để tôi chỉ cho bạn một số mã:
/* 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);
}
}
Giải thích: Như bạn thấy, bạn có thể thiết lập một báo động. và khi nhận được báo thức, chúng tôi sử dụng intent
để bắt đầu service
. Về cơ bản, intent
là một thông điệp có thể có hành động, một thứ được sắp xếp theo thứ tự.
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);
}
}
Giải thích:
Các service
bắt đầu và:
AsyncTask
mà sẽ chăm sóc của việc cập nhật một thông báo cho Activity
Nó không có ý nghĩa để dán AsyncTask
nhưng khi nó đã hoàn thành nó gọi:
private void sendSubwayUpdates(LinkedList<Subway> subways) {
Intent intent = new Intent(NEW_SUBWAYS_STATUS);
intent.putExtra("subways", subways);
sendBroadcast(intent);
}
này tạo ra một mới Intent
với một NEW_SUBWAYS_STATUS
hành động nhất định, đặt bên trong ý định của tàu điện ngầm và sendBroadcast
. Nếu ai đó quan tâm đến việc nhận được thông tin đó, nó sẽ có một người nhận.
Tôi hy vọng tôi đã tự làm rõ.
PS: Một số ngày trước, một người nào đó đã giải thích phát sóng và dự định theo cách rất hay. Ai đó muốn chia sẻ bia của anh ấy, vì vậy anh ấy sẽ gửi một phát sóng với mục đích có hành động: "FREE_BEER" và kèm thêm: "Một ly bia".
Bạn có chắc chắn rằng chúng tôi có thể kiểm tra nó với báo động tàu điện ngầm? – Sayka
Các trạng thái API:
Một BroadcastReceiver
là một lớp cơ sở cho mã mà sẽ nhận được ý đồ gửi bởi sendBroadcast()
.
Mục đích là mô tả trừu tượng về một thao tác sẽ được thực hiện.
Vì vậy, BroadcastReceiver
chỉ là một Hoạt động phản hồi mục đích. Bạn có thể gửi các chương trình phát sóng của riêng bạn hoặc thậm chí Thiết bị Android có thể gửi các chương trình phát sóng rộng của hệ thống này bao gồm những thứ như pin yếu hoặc thiết bị chỉ khởi động.
Tôi cảm thấy rằng BroadcastReceivers thực sự bối rối như là một phần của dịch vụ. Tuy nhiên, tôi đã sử dụng chúng một vài lần để có các thông điệp liên hoạt động đơn giản, như gửi đến một trong ngăn xếp lại. Không có dịch vụ nào cần thiết để sử dụng nó. "Này, đã có sự thay đổi của người dùng. Trả lời nó đi!" –
BroadcastReceiver không phải là một hoạt động! – Shatazone
** Vui lòng xem liên kết này ** https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app/44881551#44881551 –