gpt4 book ai didi

java - 多个广播使用 AlarmManager 和 BroadcastReceiver 调用自己

转载 作者:行者123 更新时间:2023-11-30 01:25:39 24 4
gpt4 key购买 nike

我正在 Android 中构建一个饮水提醒应用程序,我想在一天中多次提醒用户喝水,而无需用户打开该应用程序(以便向广播接收器发送 Intent )。最好的方法是什么?这是我的代码:

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

提前致谢!

最佳答案

更正您不需要后台服务。您需要将其置于后台服务中。

根据发布的教程中的信息。您可能没有正确连接警报服务。

https://guides.codepath.com/android/Starting-Background-Services#using-with-alarmmanager-for-periodic-tasks

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

根据您提供的信息和该教程中的详细信息,这应该可以完成您需要做的事情

关于java - 多个广播使用 AlarmManager 和 BroadcastReceiver 调用自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450537/

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