AlarmManager在初始设置时发送

时间:2016-04-08 18:46:49

标签: android broadcastreceiver alarmmanager

我的应用程序出现问题,首次启动时我想设置一个警报,我希望警报管理器在特定时间每24小时发送一次通知。 关于它的每件事情都有效,除非我第一次启动应用程序(当数据从应用程序中清除时),然后立即发送通知,直到下次时钟到达09:00时才会发出通知。

以下是设置闹钟的功能(仅在应用程序第一次运行时调用)

public void setAlarm(){
    Toast.makeText(this, "setAlarm()", Toast.LENGTH_LONG).show();
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);

    Intent alarmIntent = new Intent(this, AlertReceiver.class);

    if(PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_ONE_SHOT) != null){
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
    }
}

这是广播接收器的通知功能

public void createNotification(Context context, String msg, String msgText, String msgAlert){
    PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
    mBuilder.setSmallIcon(R.drawable.ic_stat_dmq_notification_icon);
    mBuilder.setTicker(msgAlert); //Ticker!
    mBuilder.setWhen(System.currentTimeMillis());
    mBuilder.setContentTitle(msg); //Title:
    mBuilder.setContentText(msgText); //Text
    mBuilder.setContentIntent(notificIntent);
    mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(uniqueId, mBuilder.build());

我已经看了好几天了,我似乎无法解决这个问题,也无法找到解决方案。如果有人可以帮助我,我会是一个快乐的人!

2 个答案:

答案 0 :(得分:1)

您所在地区是否已经过了上午9点。这可能是您错误的根源。在Android中设置为过去时间的警报会立即启动。尝试:

  (0.0, 0.0, 375.0, 618.0)
    (0.0, 64.0, 375.0, 554.0)
    (0.0, 0.0, 375.0, 554.0)
    (0.0, -64.0, 375.0, 554.0) //Why there is a negative y-offset here?
    (375.0, 1200.0)        
    (0.0, 0.0, 375.0, 1200.0)

疯狂只是为了测试

答案 1 :(得分:0)

好吧,毕竟我设法搞清楚了。 只有在 calendar.set

之后才需要添加的内容
if(calendar.getTimeInMillis() < System.currentTimeMillis()){
            Toast.makeText(this,"1 day have been added", Toast.LENGTH_SHORT).show();
            calendar.add(Calendar.DATE, 1);
}

它基本上只是检查时间是否过去,如果是,那么它又增加了一天,所以警报将在第二天消失。