我的alarmManager遇到了一个小问题。我正在尝试注册一个警报,以便在spicified时间显示通知。我正是这样做的:
Utils.SetAlarm(this, Utils.GOODMORNING, 7, 0, 0); // so at 7:00
public static void SetAlarm(Context context, int req, int hour, int minute, int second) {
AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
Intent intent = new Intent(context, myService.class);
intent.putExtra(ACTION_REQUEST, req);
PendingIntent pi = PendingIntent.getService(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
}
public class myService extends IntentService {
private static final int GOODMORNING_NOTIFICATION_REQUEST = 517;
public myService() {
super("myService");
}
@Override
protected void onHandleIntent(Intent intent) {
int extra = intent.getIntExtra(Utils.ACTION_REQUEST, 0);
if (extra == Utils.GOODMORNING) {
Notification notification = new Notification.Builder(this)
.setContentTitle("title")
.setContentText("content")
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true)
.build();
NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(GOODMORNING_NOTIFICATION_REQUEST, notification);
}
}
我面临的问题是,在我运行Utils.SetAlarm void后,通知立即出现。它也会在上午7点看起来很好,所以它显然有效,但我想知道是否有人知道如何避免这个问题。感谢
答案 0 :(得分:2)
试试这个
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
long time=calendar.getTimeInMillis();
if(time<System.currentTimeMillis()){
time=time+AlarmManager.INTERVAL_DAY;
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,time,
AlarmManager.INTERVAL_DAY, alarmIntent);
答案 1 :(得分:0)
为您的解决方案使用以下代码: 我使用了评论,因此您可以轻松理解
// time at which alarm will be scheduled here alarm is scheduled at 1
// day from current time,
// we fetch the current time in milliseconds and added 1 day time
// i.e. 24*60*60*1000= 86,400,000 milliseconds in a day
Long time = selectedMilli;
// create an Intent and set the class which will execute when Alarm
// triggers, here we have
// given AlarmReciever in the Intent, the onRecieve() method of this
// class will execute when
// alarm triggers and
// we will write the code to send SMS inside onRecieve() method pf
// Alarmreciever class
Intent intentAlarm = new Intent(ScheduleActivity1.this,
AlarmReciever.class);
// create the object
AlarmManager alarmManager = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
// set the alarm for particular time
alarmManager.set(AlarmManager.RTC_WAKEUP, time, PendingIntent
.getBroadcast(this, i, intentAlarm,
PendingIntent.FLAG_UPDATE_CURRENT));
/*
* alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
* time,TimeUnit.MINUTES.toMillis(1), PendingIntent.getBroadcast(this,
* i, intentAlarm,PendingIntent.FLAG_UPDATE_CURRENT));
*/
// alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
// time,AlarmManager.INTERVAL_DAY, PendingIntent.getBroadcast(this, i,
// intentAlarm,PendingIntent.FLAG_UPDATE_CURRENT));
// Toast.makeText(ScheduleActivity1.this,
// "Alarm Scheduled for " + selectedMilli, Toast.LENGTH_LONG)
// .show();