![](/img/trans.png)
[英]AlarmManager not calling BroadcastReceiver precisely every interval
[英]Multiple broadcasts calling themselves with AlarmManager and BroadcastReceiver
我正在 Android 中構建一個飲水提醒應用程序,我想提醒用戶在白天多次喝水,而無需用戶打開應用程序(以便將意圖發送到廣播接收器)。 這樣做的最佳方法是什么? 這是我的代碼:
警報接收器.java
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
createNotification(context, "DRINK", "Time to hydrate", "Alert");
}
public void createNotification(Context context, String msg, String msgText, String msgAlert) {
PendingIntent notificationIntent = PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class), 0);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_announcement)
.setContentTitle(msg)
.setContentText(msgText)
.setTicker(msgAlert);
notificationBuilder.setContentIntent(notificationIntent);
notificationBuilder.setDefaults(Notification.DEFAULT_ALL);
notificationBuilder.setAutoCancel(true);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notificationBuilder.build());
}
}
MainActivity.java 的一部分
Long alertTime = nextAlarm.getTimeInMillis();
Intent alertIntent = new Intent(this, AlertReceiver.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime,
PendingIntent.getBroadcast(this, 1, alertIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
提前致謝!
更正您不需要后台服務。 您需要將其放在后台服務中。
根據已發布教程中的信息。 您可能沒有正確連接警報服務。
活動中
Long alertTime = nextAlarm.getTimeInMillis();
Intent alertIntent = new Intent(this, AlertReceiver.class);
//ADD THIS
final PendingIntent pIntent = PendingIntent.getBroadcast(this, MyAlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, AlarmManager.INTERVAL_HALF_HOUR, pIntent);
// REMOVE THIS:
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime,
PendingIntent.getBroadcast(this, 1, alertIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
這應該根據您提供的信息和該教程中的詳細信息完成您需要執行的操作
雅這是正確的方法。 如果您想呼叫調度重復警報,請查看此鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.