多个广播使用 AlarmManager 和 BroadcastReceiver 调用自己
Multiple broadcasts calling themselves with AlarmManager and BroadcastReceiver
我正在 Android 构建一个饮水提醒应用程序,我想提醒用户在白天多次喝水,而无需用户打开应用程序(以便广播的意图接收器将被发送)。最好的方法是什么?这是我的代码:
AlertReceiver.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));
提前致谢!
是的,这是正确的做法。如果你想调用调度重复警报,请检查 this link。
更正您不需要后台服务。
您需要将其置于后台服务中。
根据发布的教程中的信息。您可能没有正确连接警报服务。
在Activity
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));
根据您提供的信息和该教程中的详细信息,这应该可以完成您需要做的事情
我正在 Android 构建一个饮水提醒应用程序,我想提醒用户在白天多次喝水,而无需用户打开应用程序(以便广播的意图接收器将被发送)。最好的方法是什么?这是我的代码:
AlertReceiver.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));
提前致谢!
是的,这是正确的做法。如果你想调用调度重复警报,请检查 this link。
更正您不需要后台服务。 您需要将其置于后台服务中。
根据发布的教程中的信息。您可能没有正确连接警报服务。
在Activity
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));
根据您提供的信息和该教程中的详细信息,这应该可以完成您需要做的事情